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
3f86238f
Commit
3f86238f
authored
26 years ago
by
Thomas G. Lockhart
Browse files
Options
Downloads
Patches
Plain Diff
Make minor changes in wording.
Adjust tags to get a clean build.
parent
0ac95554
No related branches found
No related tags found
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
doc/src/sgml/ref/lock.sgml
+100
-87
100 additions, 87 deletions
doc/src/sgml/ref/lock.sgml
doc/src/sgml/ref/set.sgml
+1
-1
1 addition, 1 deletion
doc/src/sgml/ref/set.sgml
with
101 additions
and
88 deletions
doc/src/sgml/ref/lock.sgml
+
100
−
87
View file @
3f86238f
...
...
@@ -53,13 +53,13 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
<para>
This lock mode is acquired automatically over tables being queried.
<productname>Postgres</productname> releases automatically acquired
ACCESS SHARE locks after statement is done.
ACCESS SHARE locks after
the
statement is done.
</para>
</note>
<para>
This is the le
ss
restrictive lock mode which conflicts with
ACCESS EXCLUSIVE mode
only
. It
'
s intended to protect table being
This is the le
ast
restrictive lock mode which conflicts
only
with
ACCESS EXCLUSIVE mode. It
i
s intended to protect
a
table being
queried from concurrent <command>ALTER TABLE</command>,
<command>DROP TABLE</command> and <command>VACUUM</command>
statements over the same table.
...
...
@@ -74,7 +74,7 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
<listitem>
<note>
<para>
Automatically acquired by <command>SELECT FOR UPDATE</command> statement.
Automatically acquired by
any
<command>SELECT FOR UPDATE</command> statement.
</para>
</note>
...
...
@@ -91,15 +91,15 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
<listitem>
<note>
<para>
Automatically acquired by <command>UPDATE</command>,
<command>DELETE</command>, <command>INSERT</command> statement
s
.
Automatically acquired by
any
<command>UPDATE</command>,
<command>DELETE</command>, <command>INSERT</command> statement.
</para>
</note>
<para>
Conflicts with SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE and
ACCESS EXCLUSIVE modes. Generally means that a transaction
updated
/
inserted some tuples in a table.
updated
or
inserted some tuples in a table.
</para>
</listitem>
</varlistentry>
...
...
@@ -111,7 +111,7 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
<listitem>
<note>
<para>
Automatically acquired by <command>CREATE INDEX</command> statement.
Automatically acquired by
any
<command>CREATE INDEX</command> statement.
</para>
</note>
...
...
@@ -147,7 +147,7 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
<para>
Conflicts with ROW SHARE, ROW EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE,
EXCLUSIVE and ACCESS EXCLUSIVE modes. This mode is yet more
restrictive than SHARE ROW EXCLUSIVE
one -
it blocks concurrent
restrictive than
that of
SHARE ROW EXCLUSIVE
;
it blocks
all
concurrent
SELECT FOR UPDATE queries.
</para>
</listitem>
...
...
@@ -167,13 +167,13 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
<para>
This is the most restrictive lock mode which conflicts with all other
lock modes and protects locked table from any concurrent operations.
lock modes and protects
a
locked table from any concurrent operations.
</para>
<note>
<para>
This lock mode is also acquired by
first form of
<command>LOCK TABLE</command> (i.e. without explicit
This lock mode is also acquired by
an unqualified
<command>LOCK TABLE</command> (i.e.
the command
without
an
explicit
lock mode option).
</para>
</note>
...
...
@@ -218,41 +218,48 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
Description
</title>
<para>
<productname>Postgres</productname> always uses
less
restrictive
lock mode
s
ever possible. <command>LOCK TABLE</command>
statement
provided for cases when you might need
in
more restrictive locking.
<productname>Postgres</productname> always uses
the least
restrictive
lock mode
when
ever possible. <command>LOCK TABLE</command>
provided for cases when you might need more restrictive locking.
</para>
<para>
For example, application run transaction at READ COMMITTED isolation
level and need to ensure existance data in a table for duration of
transaction. To achieve this you could use SHARE lock mode over
For example, an application runs a transaction at READ COMMITTED isolation
level and needs to ensure the existance of data in a table for the
duration of the
transaction. To achieve this you could use SHARE lock mode over the
table before querying. This will protect data from concurrent changes
and provide your further read operations over table with data in their
real current state, because of SHARE lock mode conflicts with ROW EXCLUSIVE
one, acquired by writers, and your LOCK TABLE table IN SHARE MODE statement
will wait untill concurrent write operations (if any) commit/rollback.
(Note that to read data in their real current state running transaction
at SERIALIZABLE isolation level you have to execute LOCK TABLE
statement before execution any DML statement, when transaction defines
what concurrent changes will be visible to herself).
and provide any further read operations over the table with data in their
actual current state, because SHARE lock mode conflicts with any ROW EXCLUSIVE
one acquired by writers, and your LOCK TABLE table IN SHARE MODE statement
will wait until any concurrent write operations commit or rollback.
<note>
<para>
To read data in their real current state when running a transaction
at the SERIALIZABLE isolation level you have to execute a LOCK TABLE
statement before execution any DML statement, when the transaction defines
what concurrent changes will be visible to itself.
</para>
</note>
</para>
<para>
I
f, i
n addition to requirements above, transaction is going to
In addition to
the
requirements above,
if a
transaction is going to
change data in a table then SHARE ROW EXCLUSIVE lock mode should
be acquired to prevent deadlock conditions when two concurrent
transactions
would
lock table in SHARE mode and th
an would
transactions
attempt to
lock
the
table in SHARE mode and th
en
try to change data in this table, both (implicitly) acquiring
ROW EXCLUSIVE lock mode that conflicts with concurrent SHARE lock.
</para>
<para>
Following
deadlock
issue
(when two transaction wait one another)
touch
ed above, you should follow two general rules to prevent
To continue with the
deadlock (when two transaction wait one another)
issue rais
ed above, you should follow two general rules to prevent
deadlock conditions:
</para>
<itemizedlist>
<listitem>
<para>
Transactions have to acquire locks on the same objects in the same order.
...
...
@@ -260,9 +267,9 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
<para>
For example, if one application updates row R1 and than updates
row R2 (in the same transaction) then second application shouldn't
update row R2 if it's going update row R1 later (in single transaction).
Instead, it should update R1 and R2
rows
in the same order as first
row R2 (in the same transaction) then
the
second application shouldn't
update row R2 if it's going
to
update row R1 later (in
a
single transaction).
Instead, it should update
rows
R1 and R2 in the same order as
the
first
application.
</para>
</listitem>
...
...
@@ -271,39 +278,44 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
<para>
Transactions should acquire two conflicting lock modes only if
one of them is self-conflicting (i.e. may be held by one
transaction at time only)
and should acquire most restrictive
mode first.
transaction at time only)
. If multiple lock modes are involved,
then transactions should always acquire the most restrictive
mode first.
</para>
<para>
E
xample for this rule
is described above when told about
using
SHARE ROW EXCLUSIVE mode
instead of
SHARE
on
e.
An e
xample for this rule
was given previously when disc
us
s
ing
the
use of
SHARE ROW EXCLUSIVE mode
rather than
SHARE
mod
e.
</para>
</listitem>
</itemizedlist>
<note>
<para>
<productname>Postgres</productname> does detect deadlocks and will
rollback one
of
waiting transaction
s
to resolve the deadlock.
rollback
at least
one waiting transaction to resolve the deadlock.
</para>
</note>
<refsect2 id="R2-SQL-LOCK-3">
<refsect2info>
<date>199
8
-0
9-24
</date>
<date>199
9
-0
6-08
</date>
</refsect2info>
<title>
Notes
</title>
<para>
<command>LOCK</command> is a <productname>Postgres</productname>
language extension.
</para>
<para>
Except for ACCESS SHARE/EXCLUSIVE lock modes, all other
<productname>Postgres</productname> lock modes and
<command>LOCK TABLE</command> syntax are compatible with
<productname>Oracle</productname> ones.
<productname>Postgres</productname> lock modes and the
<command>LOCK TABLE</command> syntax are compatible with those
present in <productname>Oracle</productname>.
</para>
<para>
<command>LOCK</command> works only inside transactions.
</para>
...
...
@@ -329,7 +341,7 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
-- Do ROLLBACK if record was not returned
--
INSERT INTO films_user_comments VALUES
(_id_, 'GREAT! I was waiting
it
so long!');
(_id_, 'GREAT! I was waiting
for it for
so long!');
COMMIT WORK;
</programlisting>
</para>
...
...
@@ -366,7 +378,8 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
<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. We support that too.
concurrency level on transactions. We support that too; see
<xref linkend="SQL-SET-TITLE" endterm="SQL-SET-TITLE"> for details.
</para>
</refsect2>
</refsect1>
...
...
This diff is collapsed.
Click to expand it.
doc/src/sgml/ref/set.sgml
+
1
−
1
View file @
3f86238f
...
...
@@ -6,7 +6,7 @@
<refmiscinfo>SQL - Language Statements</refmiscinfo>
</refmeta>
<refnamediv>
<refname>
<refname
id="SQL-SET-TITLE"
>
SET
</refname>
<refpurpose>
...
...
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