diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2006-04-30 18:30:40 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2006-04-30 18:30:40 +0000 |
commit | 986085a7f08c72219abf47f8b968213e81ab943c (patch) | |
tree | a80d30e59cffd042ed9adb024afc5f5d6bf00e16 /doc/src | |
parent | 931bfc96644b8f51a49161f780d43506e55d2b13 (diff) | |
download | postgresql-986085a7f08c72219abf47f8b968213e81ab943c.tar.gz postgresql-986085a7f08c72219abf47f8b968213e81ab943c.zip |
Improve the representation of FOR UPDATE/FOR SHARE so that we can
support both FOR UPDATE and FOR SHARE in one command, as well as both
NOWAIT and normal WAIT behavior. The more general code is actually
simpler and cleaner.
Diffstat (limited to 'doc/src')
-rw-r--r-- | doc/src/sgml/ref/select.sgml | 32 | ||||
-rw-r--r-- | doc/src/sgml/ref/select_into.sgml | 4 | ||||
-rw-r--r-- | doc/src/sgml/sql.sgml | 4 |
3 files changed, 24 insertions, 16 deletions
diff --git a/doc/src/sgml/ref/select.sgml b/doc/src/sgml/ref/select.sgml index f862d5f8737..b15aa361a0f 100644 --- a/doc/src/sgml/ref/select.sgml +++ b/doc/src/sgml/ref/select.sgml @@ -1,5 +1,5 @@ <!-- -$PostgreSQL: pgsql/doc/src/sgml/ref/select.sgml,v 1.90 2005/11/01 21:09:51 tgl Exp $ +$PostgreSQL: pgsql/doc/src/sgml/ref/select.sgml,v 1.91 2006/04/30 18:30:38 tgl Exp $ PostgreSQL documentation --> @@ -30,7 +30,7 @@ SELECT [ ALL | DISTINCT [ ON ( <replaceable class="parameter">expression</replac [ ORDER BY <replaceable class="parameter">expression</replaceable> [ ASC | DESC | USING <replaceable class="parameter">operator</replaceable> ] [, ...] ] [ LIMIT { <replaceable class="parameter">count</replaceable> | ALL } ] [ OFFSET <replaceable class="parameter">start</replaceable> ] - [ FOR { UPDATE | SHARE } [ OF <replaceable class="parameter">table_name</replaceable> [, ...] ] [ NOWAIT ] ] + [ FOR { UPDATE | SHARE } [ OF <replaceable class="parameter">table_name</replaceable> [, ...] ] [ NOWAIT ] [...] ] where <replaceable class="parameter">from_item</replaceable> can be one of: @@ -142,8 +142,8 @@ where <replaceable class="parameter">from_item</replaceable> can be one of: <listitem> <para> - If the <literal>FOR UPDATE</literal> or <literal>FOR SHARE</literal> - clause is specified, the + If <literal>FOR UPDATE</literal> or <literal>FOR SHARE</literal> + is specified, the <command>SELECT</command> statement locks the selected rows against concurrent updates. (See <xref linkend="sql-for-update-share" endterm="sql-for-update-share-title"> below.) @@ -853,18 +853,26 @@ FOR SHARE [ OF <replaceable class="parameter">table_name</replaceable> [, ...] ] </para> <para> - It is currently not allowed for a single <command>SELECT</command> - statement to include both <literal>FOR UPDATE</literal> and - <literal>FOR SHARE</literal>, nor can different parts of the statement use - both <literal>NOWAIT</> and normal waiting mode. - </para> - - <para> If specific tables are named in <literal>FOR UPDATE</literal> or <literal>FOR SHARE</literal>, then only rows coming from those tables are locked; any other tables used in the <command>SELECT</command> are simply read as - usual. + usual. A <literal>FOR UPDATE</literal> or <literal>FOR SHARE</literal> + clause without a table list affects all tables used in the command. + If <literal>FOR UPDATE</literal> or <literal>FOR SHARE</literal> is + applied to a view or sub-query, it affects all tables used in + the view or sub-query. + </para> + + <para> + Multiple <literal>FOR UPDATE</literal> and <literal>FOR SHARE</literal> + clauses can be written if it is necessary to specify different locking + behavior for different tables. If the same table is mentioned (or + implicitly affected) by both <literal>FOR UPDATE</literal> and + <literal>FOR SHARE</literal> clauses, then it is processed as + <literal>FOR UPDATE</literal>. Similarly, a table is processed + as <literal>NOWAIT</> if that is specified in any of the clauses + affecting it. </para> <para> diff --git a/doc/src/sgml/ref/select_into.sgml b/doc/src/sgml/ref/select_into.sgml index d9967197b87..283fd4f8b20 100644 --- a/doc/src/sgml/ref/select_into.sgml +++ b/doc/src/sgml/ref/select_into.sgml @@ -1,5 +1,5 @@ <!-- -$PostgreSQL: pgsql/doc/src/sgml/ref/select_into.sgml,v 1.36 2005/08/01 20:31:04 tgl Exp $ +$PostgreSQL: pgsql/doc/src/sgml/ref/select_into.sgml,v 1.37 2006/04/30 18:30:38 tgl Exp $ PostgreSQL documentation --> @@ -31,7 +31,7 @@ SELECT [ ALL | DISTINCT [ ON ( <replaceable class="PARAMETER">expression</replac [ ORDER BY <replaceable class="PARAMETER">expression</replaceable> [ ASC | DESC | USING <replaceable class="PARAMETER">operator</replaceable> ] [, ...] ] [ LIMIT { <replaceable class="PARAMETER">count</replaceable> | ALL } ] [ OFFSET <replaceable class="PARAMETER">start</replaceable> ] - [ FOR { UPDATE | SHARE } [ OF <replaceable class="parameter">table_name</replaceable> [, ...] ] [ NOWAIT ] ] + [ FOR { UPDATE | SHARE } [ OF <replaceable class="parameter">table_name</replaceable> [, ...] ] [ NOWAIT ] [...] ] </synopsis> </refsynopsisdiv> diff --git a/doc/src/sgml/sql.sgml b/doc/src/sgml/sql.sgml index 86539ded117..b27400b4a45 100644 --- a/doc/src/sgml/sql.sgml +++ b/doc/src/sgml/sql.sgml @@ -1,4 +1,4 @@ -<!-- $PostgreSQL: pgsql/doc/src/sgml/sql.sgml,v 1.39 2006/03/10 19:10:49 momjian Exp $ --> +<!-- $PostgreSQL: pgsql/doc/src/sgml/sql.sgml,v 1.40 2006/04/30 18:30:38 tgl Exp $ --> <chapter id="sql-intro"> <title>SQL</title> @@ -863,7 +863,7 @@ SELECT [ ALL | DISTINCT [ ON ( <replaceable class="PARAMETER">expression</replac [ ORDER BY <replaceable class="PARAMETER">expression</replaceable> [ ASC | DESC | USING <replaceable class="PARAMETER">operator</replaceable> ] [, ...] ] [ LIMIT { <replaceable class="PARAMETER">count</replaceable> | ALL } ] [ OFFSET <replaceable class="PARAMETER">start</replaceable> ] - [ FOR { UPDATE | SHARE } [ OF <replaceable class="parameter">table_name</replaceable> [, ...] ] [ NOWAIT ] ] + [ FOR { UPDATE | SHARE } [ OF <replaceable class="parameter">table_name</replaceable> [, ...] ] [ NOWAIT ] [...] ] </synopsis> </para> |