mirror of https://github.com/postgres/postgres
parent
32cfa65e49
commit
165b830ea5
@ -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: |
||||
--> |
||||
|
@ -0,0 +1,74 @@ |
||||
<REFENTRY ID="APP-PGACCESS"> |
||||
<REFMETA> |
||||
<REFENTRYTITLE id="pgaccess-ref"> |
||||
<application>pgaccess</application> |
||||
</REFENTRYTITLE> |
||||
<REFMISCINFO>Application</REFMISCINFO> |
||||
</REFMETA> |
||||
<REFNAMEDIV> |
||||
<REFNAME> |
||||
<application>pgaccess</application> |
||||
</REFNAME> |
||||
<REFPURPOSE> |
||||
<productname>Postgres</productname> graphical interactive client |
||||
</REFPURPOSE> |
||||
</refnamediv> |
||||
<REFSYNOPSISDIV> |
||||
<REFSYNOPSISDIVINFO> |
||||
<DATE>1999-05-19</DATE> |
||||
</REFSYNOPSISDIVINFO> |
||||
<SYNOPSIS> |
||||
pgaccess [ <replaceable class="parameter">dbname</replaceable> ] |
||||
</SYNOPSIS> |
||||
|
||||
<REFSECT2 ID="R2-APP-PGACCESS-1"> |
||||
<REFSECT2INFO> |
||||
<DATE>1999-05-19</DATE> |
||||
</REFSECT2INFO> |
||||
<TITLE> |
||||
Inputs |
||||
</TITLE> |
||||
<PARA> |
||||
</para> |
||||
</refsect2> |
||||
|
||||
<REFSECT2 ID="R2-APP-PGACCESS-2"> |
||||
<REFSECT2INFO> |
||||
<DATE>1999-05-19</DATE> |
||||
</REFSECT2INFO> |
||||
<TITLE> |
||||
Outputs |
||||
</TITLE> |
||||
<PARA> |
||||
</para> |
||||
</refsect2> |
||||
</refsynopsisdiv> |
||||
|
||||
<REFSECT1 ID="R1-APP-PGACCESS-1"> |
||||
<REFSECT1INFO> |
||||
<DATE>1999-05-19</DATE> |
||||
</REFSECT1INFO> |
||||
<TITLE> |
||||
Description |
||||
</TITLE> |
||||
<PARA> |
||||
</para> |
||||
</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: |
||||
--> |
@ -0,0 +1,74 @@ |
||||
<REFENTRY ID="APP-PGADMIN"> |
||||
<REFMETA> |
||||
<REFENTRYTITLE id="pgadmin-ref"> |
||||
<application>pgadmin</application> |
||||
</REFENTRYTITLE> |
||||
<REFMISCINFO>Application</REFMISCINFO> |
||||
</REFMETA> |
||||
<REFNAMEDIV> |
||||
<REFNAME> |
||||
<application>pgadmin</application> |
||||
</REFNAME> |
||||
<REFPURPOSE> |
||||
<productname>Postgres</productname> graphical interactive client |
||||
</REFPURPOSE> |
||||
</refnamediv> |
||||
<REFSYNOPSISDIV> |
||||
<REFSYNOPSISDIVINFO> |
||||
<DATE>1999-05-19</DATE> |
||||
</REFSYNOPSISDIVINFO> |
||||
<SYNOPSIS> |
||||
pgadmin [ <replaceable class="parameter">dbname</replaceable> ] |
||||
</SYNOPSIS> |
||||
|
||||
<REFSECT2 ID="R2-APP-PGADMIN-1"> |
||||
<REFSECT2INFO> |
||||
<DATE>1999-05-19</DATE> |
||||
</REFSECT2INFO> |
||||
<TITLE> |
||||
Inputs |
||||
</TITLE> |
||||
<PARA> |
||||
</para> |
||||
</refsect2> |
||||
|
||||
<REFSECT2 ID="R2-APP-PGADMIN-2"> |
||||
<REFSECT2INFO> |
||||
<DATE>1999-05-19</DATE> |
||||
</REFSECT2INFO> |
||||
<TITLE> |
||||
Outputs |
||||
</TITLE> |
||||
<PARA> |
||||
</para> |
||||
</refsect2> |
||||
</refsynopsisdiv> |
||||
|
||||
<REFSECT1 ID="R1-APP-PGADMIN-1"> |
||||
<REFSECT1INFO> |
||||
<DATE>1999-05-19</DATE> |
||||
</REFSECT1INFO> |
||||
<TITLE> |
||||
Description |
||||
</TITLE> |
||||
<PARA> |
||||
</para> |
||||
</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: |
||||
--> |
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue