diff options
Diffstat (limited to 'doc/src/sgml/ref/lock.sgml')
-rw-r--r-- | doc/src/sgml/ref/lock.sgml | 375 |
1 files changed, 196 insertions, 179 deletions
diff --git a/doc/src/sgml/ref/lock.sgml b/doc/src/sgml/ref/lock.sgml index 0d2c5047523..dc702b0cdb8 100644 --- a/doc/src/sgml/ref/lock.sgml +++ b/doc/src/sgml/ref/lock.sgml @@ -1,190 +1,207 @@ <REFENTRY ID="SQL-LOCK"> -<REFMETA> -<REFENTRYTITLE> -LOCK -</REFENTRYTITLE> -<REFMISCINFO>SQL - Language Statements</REFMISCINFO> -</REFMETA> -<REFNAMEDIV> -<REFNAME> -LOCK -</REFNAME> -<REFPURPOSE> -Explicit lock of a table inside a transaction -</REFPURPOSE> - </refnamediv> -<REFSYNOPSISDIV> -<REFSYNOPSISDIVINFO> -<DATE>1998-09-24</DATE> -</REFSYNOPSISDIVINFO> -<SYNOPSIS> -LOCK [ TABLE ] <REPLACEABLE CLASS="PARAMETER">table</REPLACEABLE> -</SYNOPSIS> + <REFMETA> + <REFENTRYTITLE> + LOCK + </REFENTRYTITLE> + <REFMISCINFO>SQL - Language Statements</REFMISCINFO> + </REFMETA> + <REFNAMEDIV> + <REFNAME> + LOCK + </REFNAME> + <REFPURPOSE> + Explicit lock of a table inside a transaction + </REFPURPOSE> + </refnamediv> + <REFSYNOPSISDIV> + <REFSYNOPSISDIVINFO> + <DATE>1998-09-24</DATE> + </REFSYNOPSISDIVINFO> + <SYNOPSIS> + LOCK [ TABLE ] <REPLACEABLE CLASS="PARAMETER">table</REPLACEABLE> + </SYNOPSIS> - <REFSECT2 ID="R2-SQL-LOCK-1"> - <REFSECT2INFO> - <DATE>1998-09-01</DATE> - </REFSECT2INFO> - <TITLE> - Inputs - </TITLE> - <PARA> - </PARA> - <VARIABLELIST> - <VARLISTENTRY> - <TERM> - <REPLACEABLE CLASS="PARAMETER">table</REPLACEABLE> - </TERM> - <LISTITEM> - <PARA> - The name of an existing table to lock. - </para> - </listitem> - </varlistentry> - </VARIABLELIST> + <REFSECT2 ID="R2-SQL-LOCK-1"> + <REFSECT2INFO> + <DATE>1998-09-01</DATE> + </REFSECT2INFO> + <TITLE> + Inputs + </TITLE> + <PARA> + </PARA> + <VARIABLELIST> + <VARLISTENTRY> + <TERM> + <REPLACEABLE CLASS="PARAMETER">table</REPLACEABLE> + </TERM> + <LISTITEM> + <PARA> + The name of an existing table to lock. + </para> + </listitem> + </varlistentry> + </VARIABLELIST> - </REFSECT2> + </REFSECT2> - <REFSECT2 ID="R2-SQL-LOCK-2"> - <REFSECT2INFO> - <DATE>1998-09-24</DATE> - </REFSECT2INFO> - <TITLE> - Outputs - </TITLE> - <PARA> - - <VARIABLELIST> - <VARLISTENTRY> - <TERM> - DELETE 0 - </TERM> - <LISTITEM> - <PARA> - Message returned on a successful lock. - <command>LOCK</command> is implemented as a - <command>DELETE FROM <REPLACEABLE CLASS="PARAMETER">table</REPLACEABLE></command> - which is guaranteed to not delete any rows. - </para> - </listitem> - </varlistentry> - <VARLISTENTRY> - <TERM> - ERROR <REPLACEABLE CLASS="PARAMETER">table</REPLACEABLE>: Table does not exist. - </TERM> - <LISTITEM> - <PARA> - Message returned if <REPLACEABLE CLASS="PARAMETER">table</REPLACEABLE> - does not exist. - </para> - </listitem> - </varlistentry> - </VARIABLELIST> - </para> - </REFSECT2> - </REFSYNOPSISDIV> + <REFSECT2 ID="R2-SQL-LOCK-2"> + <REFSECT2INFO> + <DATE>1998-09-24</DATE> + </REFSECT2INFO> + <TITLE> + Outputs + </TITLE> + <PARA> + + <VARIABLELIST> + <VARLISTENTRY> + <TERM> + DELETE 0 + </TERM> + <LISTITEM> + <PARA> + Message returned on a successful lock. + <command>LOCK</command> is implemented as a + <command>DELETE FROM <REPLACEABLE CLASS="PARAMETER">table</REPLACEABLE></command> + which is guaranteed to not delete any rows. + </para> + </listitem> + </varlistentry> + <VARLISTENTRY> + <TERM> + ERROR <REPLACEABLE CLASS="PARAMETER">table</REPLACEABLE>: Table does not exist. + </TERM> + <LISTITEM> + <PARA> + Message returned if <REPLACEABLE CLASS="PARAMETER">table</REPLACEABLE> + does not exist. + </para> + </listitem> + </varlistentry> + </VARIABLELIST> + </para> + </REFSECT2> + </REFSYNOPSISDIV> - <REFSECT1 ID="R1-SQL-LOCK-1"> - <REFSECT1INFO> - <DATE>1998-09-24</DATE> - </REFSECT1INFO> - <TITLE> - Description - </TITLE> - <PARA> - <command>LOCK</command> locks in exclusive mode a table inside - a transaction. The classic use for this is - the case where you want to select some data, then - update it inside a transaction. - If you don't explicit lock a table using LOCK statement, it will be - implicit locked only at the first - <command>UPDATE</command>, <command>INSERT</command>, - or <command>DELETE</command> operation. - If you don't exclusive lock the table before the select, some - other user may also read the selected data, and try and do - their own update, causing a deadlock while you both wait - for the other to release the select-induced shared lock so - you can get an exclusive lock to do the update. - </para> - <para> - Another example of deadlock is where one user locks one - table, and another user locks a second table. While both - keep their existing locks, the first user tries to lock - the second user's table, and the second user tries to lock - the first user's table. Both users deadlock waiting for - the tables to become available. The only solution to this - is for both users to lock tables in the same order, so - user's lock acquisitions and requests to not form a deadlock. - </para> - <note> - <para> - <productname>Postgres</productname> does detect deadlocks and will - rollback transactions to resolve the deadlock. Usually, at least one - of the deadlocked transactions will complete successfully. - </para> - </note> + <REFSECT1 ID="R1-SQL-LOCK-1"> + <REFSECT1INFO> + <DATE>1998-09-24</DATE> + </REFSECT1INFO> + <TITLE> + Description + </TITLE> + <PARA> + <command>LOCK</command> locks in exclusive mode a table inside + a transaction. The classic use for this is + the case where you want to select some data, then + update it inside a transaction. + If you don't explicit lock a table using LOCK statement, it will be + implicit locked only at the first + <command>UPDATE</command>, <command>INSERT</command>, + or <command>DELETE</command> operation. + If you don't exclusive lock the table before the select, some + other user may also read the selected data, and try and do + their own update, causing a deadlock while you both wait + for the other to release the select-induced shared lock so + you can get an exclusive lock to do the update. + </para> + <para> + Another example of deadlock is where one user locks one + table, and another user locks a second table. While both + keep their existing locks, the first user tries to lock + the second user's table, and the second user tries to lock + the first user's table. Both users deadlock waiting for + the tables to become available. The only solution to this + is for both users to lock tables in the same order, so + user's lock acquisitions and requests to not form a deadlock. + </para> + <note> + <para> + <productname>Postgres</productname> does detect deadlocks and will + rollback transactions to resolve the deadlock. Usually, at least one + of the deadlocked transactions will complete successfully. + </para> + </note> - <REFSECT2 ID="R2-SQL-LOCK-3"> - <REFSECT2INFO> - <DATE>1998-09-24</DATE> - </REFSECT2INFO> - <TITLE> - Notes - </TITLE> - <para> - <command>LOCK</command> is a <productname>Postgres</productname> - language extension. - </para> - <para> - <command>LOCK</command> works only inside transactions. - - <note> - <title>Bug</title> - <para> - If the locked table is dropped then it will be automatically - unlocked even if a transaction is still in progress. - </para> - </note> - </para> - </REFSECT2> - </refsect1> + <REFSECT2 ID="R2-SQL-LOCK-3"> + <REFSECT2INFO> + <DATE>1998-09-24</DATE> + </REFSECT2INFO> + <TITLE> + Notes + </TITLE> + <para> + <command>LOCK</command> is a <productname>Postgres</productname> + language extension. + </para> + <para> + <command>LOCK</command> works only inside transactions. + + <note> + <title>Bug</title> + <para> + If the locked table is dropped then it will be automatically + unlocked even if a transaction is still in progress. + </para> + </note> + </para> + </REFSECT2> + </refsect1> - <REFSECT1 ID="R1-SQL-LOCK-2"> - <TITLE> - Usage - </TITLE> - <PARA> - </PARA> - <ProgramListing> - --Explicit locking to prevent deadlock: - -- - BEGIN WORK; - LOCK films; - SELECT * FROM films; - UPDATE films SET len = INTERVAL '100 minute' - WHERE len = INTERVAL '117 minute'; - COMMIT WORK; - </ProgramListing> + <REFSECT1 ID="R1-SQL-LOCK-2"> + <TITLE> + Usage + </TITLE> + <PARA> + </PARA> + <ProgramListing> + --Explicit locking to prevent deadlock: + -- + BEGIN WORK; + LOCK films; + SELECT * FROM films; + UPDATE films SET len = INTERVAL '100 minute' + WHERE len = INTERVAL '117 minute'; + COMMIT WORK; + </ProgramListing> - </REFSECT1> + </REFSECT1> - <REFSECT1 ID="R1-SQL-LOCK-3"> - <TITLE> - Compatibility - </TITLE> + <REFSECT1 ID="R1-SQL-LOCK-3"> + <TITLE> + Compatibility + </TITLE> - <REFSECT2 ID="R2-SQL-LOCK-4"> - <REFSECT2INFO> - <DATE>1998-09-24</DATE> - </REFSECT2INFO> - <TITLE> - SQL92 - </TITLE> - <PARA> - There is no <command>LOCK TABLE</command> in <acronym>SQL92</acronym>, - which instead uses <command>SET TRANSACTION</command> to specify - concurrency level on transactions. - </para> - </refsect2> - </refsect1> + <REFSECT2 ID="R2-SQL-LOCK-4"> + <REFSECT2INFO> + <DATE>1998-09-24</DATE> + </REFSECT2INFO> + <TITLE> + SQL92 + </TITLE> + <PARA> + There is no <command>LOCK TABLE</command> in <acronym>SQL92</acronym>, + which instead uses <command>SET TRANSACTION</command> to specify + concurrency level on transactions. + </para> + </refsect2> + </refsect1> </REFENTRY> + +<!-- Keep this comment at the end of the file +Local variables: +mode: sgml +sgml-omittag:nil +sgml-shorttag:t +sgml-minimize-attributes:nil +sgml-always-quote-attributes:t +sgml-indent-step:1 +sgml-indent-data:t +sgml-parent-document:nil +sgml-default-dtd-file:"../reference.ced" +sgml-exposed-tags:nil +sgml-local-catalogs:"/usr/lib/sgml/CATALOG" +sgml-local-ecat-files:nil +End: +--> |