Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
3f86238f
Commit
3f86238f
authored
Jun 09, 1999
by
Thomas G. Lockhart
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Make minor changes in wording.
Adjust tags to get a clean build.
parent
0ac95554
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
101 additions
and
88 deletions
+101
-88
doc/src/sgml/ref/lock.sgml
doc/src/sgml/ref/lock.sgml
+100
-87
doc/src/sgml/ref/set.sgml
doc/src/sgml/ref/set.sgml
+1
-1
No files found.
doc/src/sgml/ref/lock.sgml
View file @
3f86238f
...
@@ -53,13 +53,13 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
...
@@ -53,13 +53,13 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
<para>
<para>
This lock mode is acquired automatically over tables being queried.
This lock mode is acquired automatically over tables being queried.
<productname>Postgres</productname> releases automatically acquired
<productname>Postgres</productname> releases automatically acquired
ACCESS SHARE locks after statement is done.
ACCESS SHARE locks after
the
statement is done.
</para>
</para>
</note>
</note>
<para>
<para>
This is the le
ss restrictive lock mode which conflicts
with
This is the le
ast restrictive lock mode which conflicts only
with
ACCESS EXCLUSIVE mode
only. It's intended to protect
table being
ACCESS EXCLUSIVE mode
. It is intended to protect a
table being
queried from concurrent <command>ALTER TABLE</command>,
queried from concurrent <command>ALTER TABLE</command>,
<command>DROP TABLE</command> and <command>VACUUM</command>
<command>DROP TABLE</command> and <command>VACUUM</command>
statements over the same table.
statements over the same table.
...
@@ -74,7 +74,7 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
...
@@ -74,7 +74,7 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
<listitem>
<listitem>
<note>
<note>
<para>
<para>
Automatically acquired by <command>SELECT FOR UPDATE</command> statement.
Automatically acquired by
any
<command>SELECT FOR UPDATE</command> statement.
</para>
</para>
</note>
</note>
...
@@ -91,15 +91,15 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
...
@@ -91,15 +91,15 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
<listitem>
<listitem>
<note>
<note>
<para>
<para>
Automatically acquired by <command>UPDATE</command>,
Automatically acquired by
any
<command>UPDATE</command>,
<command>DELETE</command>, <command>INSERT</command> statement
s
.
<command>DELETE</command>, <command>INSERT</command> statement.
</para>
</para>
</note>
</note>
<para>
<para>
Conflicts with SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE and
Conflicts with SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE and
ACCESS EXCLUSIVE modes. Generally means that a transaction
ACCESS EXCLUSIVE modes. Generally means that a transaction
updated
/
inserted some tuples in a table.
updated
or
inserted some tuples in a table.
</para>
</para>
</listitem>
</listitem>
</varlistentry>
</varlistentry>
...
@@ -111,7 +111,7 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
...
@@ -111,7 +111,7 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
<listitem>
<listitem>
<note>
<note>
<para>
<para>
Automatically acquired by <command>CREATE INDEX</command> statement.
Automatically acquired by
any
<command>CREATE INDEX</command> statement.
</para>
</para>
</note>
</note>
...
@@ -147,7 +147,7 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
...
@@ -147,7 +147,7 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
<para>
<para>
Conflicts with ROW SHARE, ROW EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE,
Conflicts with ROW SHARE, ROW EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE,
EXCLUSIVE and ACCESS EXCLUSIVE modes. This mode is yet more
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.
SELECT FOR UPDATE queries.
</para>
</para>
</listitem>
</listitem>
...
@@ -167,13 +167,13 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
...
@@ -167,13 +167,13 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
<para>
<para>
This is the most restrictive lock mode which conflicts with all other
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>
</para>
<note>
<note>
<para>
<para>
This lock mode is also acquired by first form of
This lock mode is also acquired by an unqualified
<command>LOCK TABLE</command> (i.e. without
explicit
<command>LOCK TABLE</command> (i.e. the command without an
explicit
lock mode option).
lock mode option).
</para>
</para>
</note>
</note>
...
@@ -218,41 +218,48 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
...
@@ -218,41 +218,48 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
Description
Description
</title>
</title>
<para>
<para>
<productname>Postgres</productname> always uses
less
restrictive
<productname>Postgres</productname> always uses
the least
restrictive
lock mode
s ever possible. <command>LOCK TABLE</command> statement
lock mode
whenever possible. <command>LOCK TABLE</command>
provided for cases when you might need
in
more restrictive locking.
provided for cases when you might need more restrictive locking.
</para>
</para>
<para>
<para>
For example, application run transaction at READ COMMITTED isolation
For example, an application runs a transaction at READ COMMITTED isolation
level and need to ensure existance data in a table for duration of
level and needs to ensure the existance of data in a table for the
transaction. To achieve this you could use SHARE lock mode over
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
table before querying. This will protect data from concurrent changes
and provide your further read operations over table with data in their
and provide any further read operations over the table with data in their
real current state, because of SHARE lock mode conflicts with ROW EXCLUSIVE
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
one acquired by writers, and your LOCK TABLE table IN SHARE MODE statement
will wait untill concurrent write operations (if any) commit/rollback.
will wait until any concurrent write operations commit or rollback.
(Note that to read data in their real current state running transaction
at SERIALIZABLE isolation level you have to execute LOCK TABLE
<note>
statement before execution any DML statement, when transaction defines
<para>
what concurrent changes will be visible to herself).
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>
<para>
<para>
I
f, in addition to requirements above,
transaction is going to
I
n addition to the requirements above, if a
transaction is going to
change data in a table then SHARE ROW EXCLUSIVE lock mode should
change data in a table then SHARE ROW EXCLUSIVE lock mode should
be acquired to prevent deadlock conditions when two concurrent
be acquired to prevent deadlock conditions when two concurrent
transactions
would lock table in SHARE mode and than would
transactions
attempt to lock the table in SHARE mode and then
try to change data in this table, both (implicitly) acquiring
try to change data in this table, both (implicitly) acquiring
ROW EXCLUSIVE lock mode that conflicts with concurrent SHARE lock.
ROW EXCLUSIVE lock mode that conflicts with concurrent SHARE lock.
</para>
</para>
<para>
<para>
Following deadlock issue
(when two transaction wait one another)
To continue with the deadlock
(when two transaction wait one another)
touch
ed above, you should follow two general rules to prevent
issue rais
ed above, you should follow two general rules to prevent
deadlock conditions:
deadlock conditions:
</para>
</para>
<itemizedlist>
<listitem>
<listitem>
<para>
<para>
Transactions have to acquire locks on the same objects in the same order.
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
...
@@ -260,9 +267,9 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
<para>
<para>
For example, if one application updates row R1 and than updates
For example, if one application updates row R1 and than updates
row R2 (in the same transaction) then
second application shouldn't
row R2 (in the same transaction) then the
second application shouldn't
update row R2 if it's going update row R1 later (in
single transaction).
update row R2 if it's going to update row R1 later (in a
single transaction).
Instead, it should update R1 and R2 rows in the same order as
first
Instead, it should update rows R1 and R2 in the same order as the
first
application.
application.
</para>
</para>
</listitem>
</listitem>
...
@@ -271,39 +278,44 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
...
@@ -271,39 +278,44 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
<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 one
transaction at time only) and should acquire most restrictive
transaction at time only). If multiple lock modes are involved,
mode first.
then transactions should always acquire the most restrictive
mode first.
</para>
</para>
<para>
<para>
Example for this rule is described above when told about using
An example for this rule was given previously when discussing the
SHARE ROW EXCLUSIVE mode instead of SHARE on
e.
use of SHARE ROW EXCLUSIVE mode rather than SHARE mod
e.
</para>
</para>
</listitem>
</listitem>
</itemizedlist>
<note>
<note>
<para>
<para>
<productname>Postgres</productname> does detect deadlocks and will
<productname>Postgres</productname> does detect deadlocks and will
rollback
one of waiting transactions
to resolve the deadlock.
rollback
at least one waiting transaction
to resolve the deadlock.
</para>
</para>
</note>
</note>
<refsect2 id="R2-SQL-LOCK-3">
<refsect2 id="R2-SQL-LOCK-3">
<refsect2info>
<refsect2info>
<date>199
8-09-24
</date>
<date>199
9-06-08
</date>
</refsect2info>
</refsect2info>
<title>
<title>
Notes
Notes
</title>
</title>
<para>
<para>
<command>LOCK</command> is a <productname>Postgres</productname>
<command>LOCK</command> is a <productname>Postgres</productname>
language extension.
language extension.
</para>
</para>
<para>
<para>
Except for ACCESS SHARE/EXCLUSIVE lock modes, all other
Except for ACCESS SHARE/EXCLUSIVE lock modes, all other
<productname>Postgres</productname> lock modes and
<productname>Postgres</productname> lock modes and the
<command>LOCK TABLE</command> syntax are compatible with
<command>LOCK TABLE</command> syntax are compatible with those
<productname>Oracle</productname> ones.
present in <productname>Oracle</productname>.
</para>
<para>
<para>
<command>LOCK</command> works only inside transactions.
<command>LOCK</command> works only inside transactions.
</para>
</para>
...
@@ -329,7 +341,7 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
...
@@ -329,7 +341,7 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
-- Do ROLLBACK if record was not returned
-- Do ROLLBACK if record was not returned
--
--
INSERT INTO films_user_comments VALUES
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;
COMMIT WORK;
</programlisting>
</programlisting>
</para>
</para>
...
@@ -366,7 +378,8 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
...
@@ -366,7 +378,8 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">table</replaceable> IN SHARE ROW E
<para>
<para>
There is no <command>LOCK TABLE</command> in <acronym>SQL92</acronym>,
There is no <command>LOCK TABLE</command> in <acronym>SQL92</acronym>,
which instead uses <command>SET TRANSACTION</command> to specify
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>
</para>
</refsect2>
</refsect2>
</refsect1>
</refsect1>
...
...
doc/src/sgml/ref/set.sgml
View file @
3f86238f
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
<refmiscinfo>SQL - Language Statements</refmiscinfo>
<refmiscinfo>SQL - Language Statements</refmiscinfo>
</refmeta>
</refmeta>
<refnamediv>
<refnamediv>
<refname>
<refname
id="SQL-SET-TITLE"
>
SET
SET
</refname>
</refname>
<refpurpose>
<refpurpose>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment