On Fri, Apr 27, 2018 at 01:47:49PM +0000, PG Doc comments form wrote: > The following documentation comment has been logged on the website: > > Page: https://www.postgresql.org/docs/9.5/static/sql-select.html > Description: > > In the SELECT statement page the argument type of the (FOR SHARE/UPDATE) OF > clause is listed to be a table_name. This is not *quite* accurate - it > should reference the *alias* assigned to the table if one was given. The > distinction is subtly important, as without this information the > documentation implies that the choice of rows to lock can only be done > per-table (i.e. that in a query mentioning the same table twice, *any* > tuples being pulled from that table would be given the same treatment). > > But in fact postgres supports specifying the locking behaviour per-alias, > which is a really powerful ability. And actually, trying to specify it by > actual "table name" where an alias has been assigned won't work either.
I can confirm this report from 2018: CREATE TABLE test ( x INT ); SELECT * FROM test AS t1 JOIN test AS t2 ON (TRUE) FOR UPDATE OF t1; x | x ---+--- SELECT * FROM test AS t1 JOIN test AS t2 ON (TRUE) FOR UPDATE OF t2; x | x ---+--- The attached patch documents this. -- Bruce Momjian <br...@momjian.us> https://momjian.us EDB https://enterprisedb.com Only you can decide what is important to you.
diff --git a/doc/src/sgml/ref/select.sgml b/doc/src/sgml/ref/select.sgml index 227ba1993b..ab3760057c 100644 --- a/doc/src/sgml/ref/select.sgml +++ b/doc/src/sgml/ref/select.sgml @@ -45,7 +45,7 @@ SELECT [ ALL | DISTINCT [ ON ( <replaceable class="parameter">expression</replac [ LIMIT { <replaceable class="parameter">count</replaceable> | ALL } ] [ OFFSET <replaceable class="parameter">start</replaceable> [ ROW | ROWS ] ] [ FETCH { FIRST | NEXT } [ <replaceable class="parameter">count</replaceable> ] { ROW | ROWS } { ONLY | WITH TIES } ] - [ FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE } [ OF <replaceable class="parameter">table_name</replaceable> [, ...] ] [ NOWAIT | SKIP LOCKED ] [...] ] + [ FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE } [ OF { <replaceable class="parameter">table_name</replaceable> | <replaceable class="parameter">alias</replaceable> } [, ...] ] [ NOWAIT | SKIP LOCKED ] [...] ] <phrase>where <replaceable class="parameter">from_item</replaceable> can be one of:</phrase>