Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
P
postgres-lambda-diff
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Jakob Huber
postgres-lambda-diff
Commits
1d174c30
Commit
1d174c30
authored
23 years ago
by
Tom Lane
Browse files
Options
Downloads
Patches
Plain Diff
Explain privileges required for LOCK. Minor wordsmithing too.
parent
9ad73797
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
doc/src/sgml/ref/lock.sgml
+40
-30
40 additions, 30 deletions
doc/src/sgml/ref/lock.sgml
with
40 additions
and
30 deletions
doc/src/sgml/ref/lock.sgml
+
40
−
30
View file @
1d174c30
<!--
<!--
$Header: /cvsroot/pgsql/doc/src/sgml/ref/lock.sgml,v 1.
29
2001/1
2/08 03:24:37 thomas
Exp $
$Header: /cvsroot/pgsql/doc/src/sgml/ref/lock.sgml,v 1.
30
20
02/
01/1
8 01:05:43 tgl
Exp $
PostgreSQL documentation
PostgreSQL documentation
-->
-->
...
@@ -76,8 +76,7 @@ where <replaceable class="PARAMETER">lockmode</replaceable> is one of:
...
@@ -76,8 +76,7 @@ where <replaceable class="PARAMETER">lockmode</replaceable> is one of:
<listitem>
<listitem>
<note>
<note>
<para>
<para>
Automatically acquired by <command>SELECT...FOR UPDATE</command>.
Automatically acquired by <command>SELECT ... FOR UPDATE</command>.
While it is a shared lock, may be upgraded later to a ROW EXCLUSIVE lock.
</para>
</para>
</note>
</note>
...
@@ -175,6 +174,9 @@ where <replaceable class="PARAMETER">lockmode</replaceable> is one of:
...
@@ -175,6 +174,9 @@ where <replaceable class="PARAMETER">lockmode</replaceable> is one of:
Conflicts with ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE,
Conflicts with ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE,
SHARE, SHARE ROW EXCLUSIVE,
SHARE, SHARE ROW EXCLUSIVE,
EXCLUSIVE and ACCESS EXCLUSIVE modes.
EXCLUSIVE and ACCESS EXCLUSIVE modes.
This mode allows only concurrent ACCESS SHARE, i.e., only reads
from the table can proceed in parallel with a transaction holding
this lock mode.
</para>
</para>
</listitem>
</listitem>
</varlistentry>
</varlistentry>
...
@@ -225,7 +227,7 @@ LOCK TABLE
...
@@ -225,7 +227,7 @@ LOCK TABLE
</computeroutput></term>
</computeroutput></term>
<listitem>
<listitem>
<para>
<para>
The lock was successfully a
ppli
ed.
The lock was successfully a
cquir
ed.
</para>
</para>
</listitem>
</listitem>
</varlistentry>
</varlistentry>
...
@@ -310,23 +312,26 @@ ERROR <replaceable class="PARAMETER">name</replaceable>: Table does not exist.
...
@@ -310,23 +312,26 @@ ERROR <replaceable class="PARAMETER">name</replaceable>: Table does not exist.
</para>
</para>
<para>
<para>
For example, an application runs a transaction at READ COMMITTED
isolation
For example,
suppose
an application runs a transaction at READ COMMITTED
level and needs to ensure the existence of data in a table for
the
isolation
level and needs to ensure the existence of data in a table for
duration of the
the
duration of the
transaction. To achieve this you could
use
SHARE lock mode over the
transaction. To achieve this you could
obtain
SHARE lock mode over the
table before querying. This will pr
otect data from
concurrent changes
table before querying. This will pr
event
concurrent
data
changes
and
provide any
further read operations over the table
with
data in their
and
ensure
further read operations over the table
see
data in their
actual current state, because SHARE lock mode conflicts with any ROW
EXCLUSIVE
actual current state, because SHARE lock mode conflicts with any ROW
one
acquired by writers, and your
EXCLUSIVE lock
acquired by writers, and your
<command>LOCK TABLE <replaceable class="PARAMETER">name</replaceable> IN SHARE MODE</command>
<command>LOCK TABLE <replaceable class="PARAMETER">name</replaceable> IN SHARE MODE</command>
statement will wait until any concurrent write operations commit or rollback.
statement will wait until any concurrent write operations commit or
rollback. Thus, once you obtain the lock, there are no uncommitted
writes outstanding.
<note>
<note>
<para>
<para>
To read data in their real current state when running a transaction
To read data in their actual current state when running a transaction
at the SERIALIZABLE isolation level you have to execute a LOCK TABLE
at the SERIALIZABLE isolation level, you have to execute the LOCK TABLE
statement before executing any DML statement, when the transaction defines
statement before executing any DML statement. A serializable
what concurrent changes will be visible to itself.
transaction's view of data will be frozen when its first DML statement
begins.
</para>
</para>
</note>
</note>
</para>
</para>
...
@@ -341,7 +346,7 @@ ERROR <replaceable class="PARAMETER">name</replaceable>: Table does not exist.
...
@@ -341,7 +346,7 @@ ERROR <replaceable class="PARAMETER">name</replaceable>: Table does not exist.
</para>
</para>
<para>
<para>
To continue with the deadlock (when two transaction wait for one another)
To continue with the deadlock (when two transaction
s
wait for one another)
issue raised above, you should follow two general rules to prevent
issue raised above, you should follow two general rules to prevent
deadlock conditions:
deadlock conditions:
</para>
</para>
...
@@ -364,8 +369,8 @@ ERROR <replaceable class="PARAMETER">name</replaceable>: Table does not exist.
...
@@ -364,8 +369,8 @@ ERROR <replaceable class="PARAMETER">name</replaceable>: Table does not exist.
<listitem>
<listitem>
<para>
<para>
Transactions should acquire two conflicting lock modes only if
Transactions should acquire two conflicting lock modes only if
one of them is self-conflicting (i.e., may be held by one
one of them is self-conflicting (i.e., may be held by
only
one
transaction at time
only
). If multiple lock modes are involved,
transaction at
a
time). If multiple lock modes are involved,
then transactions should always acquire the most restrictive mode first.
then transactions should always acquire the most restrictive mode first.
</para>
</para>
...
@@ -399,19 +404,17 @@ ERROR <replaceable class="PARAMETER">name</replaceable>: Table does not exist.
...
@@ -399,19 +404,17 @@ ERROR <replaceable class="PARAMETER">name</replaceable>: Table does not exist.
</title>
</title>
<para>
<para>
<command>LOCK</command> is a <productname>PostgreSQL</productname>
<literal>LOCK ... IN ACCESS SHARE MODE</> requires <literal>SELECT</>
language extension.
privileges on the target table. All other forms of <command>LOCK</>
require <literal>UPDATE</> and/or <literal>DELETE</> privileges.
</para>
</para>
<para>
<para>
Except for ACCESS SHARE, ACCESS EXCLUSIVE, and SHARE UPDATE EXCLUSIVE lock
<command>LOCK</command> is useful only inside a transaction block
modes, the <productname>PostgreSQL</productname> lock modes and the
(<command>BEGIN</>...<command>COMMIT</>), since the lock is dropped
<command>LOCK TABLE</command> syntax are compatible with those
as soon as the transaction ends. A <command>LOCK</> command appearing
present in <productname>Oracle</productname>.
outside any transaction block forms a self-contained transaction, so the
</para>
lock will be dropped as soon as it is obtained.
<para>
<command>LOCK</command> works only inside transactions.
</para>
</para>
</refsect2>
</refsect2>
...
@@ -471,6 +474,13 @@ COMMIT WORK;
...
@@ -471,6 +474,13 @@ COMMIT WORK;
concurrency levels on transactions. We support that too; see
concurrency levels on transactions. We support that too; see
<xref linkend="SQL-SET-TRANSACTION" endterm="SQL-SET-TRANSACTION-TITLE"> for details.
<xref linkend="SQL-SET-TRANSACTION" endterm="SQL-SET-TRANSACTION-TITLE"> for details.
</para>
</para>
<para>
Except for ACCESS SHARE, ACCESS EXCLUSIVE, and SHARE UPDATE EXCLUSIVE lock
modes, the <productname>PostgreSQL</productname> lock modes and the
<command>LOCK TABLE</command> syntax are compatible with those
present in <productname>Oracle</productname>(TM).
</para>
</refsect2>
</refsect2>
</refsect1>
</refsect1>
</refentry>
</refentry>
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment