Thread: Add further details to ROW SHARE table level lock modes section

Add further details to ROW SHARE table level lock modes section

From
PG Doc comments form
Date:
The following documentation comment has been logged on the website:

Page: https://www.postgresql.org/docs/14/explicit-locking.html
Description:

The ROW SHARE table level lock modes section currently states:
```
Conflicts with the EXCLUSIVE and ACCESS EXCLUSIVE lock modes.

The SELECT FOR UPDATE and SELECT FOR SHARE commands acquire a lock of this
mode on the target table(s) (in addition to ACCESS SHARE locks on any other
tables that are referenced but not selected FOR UPDATE/FOR SHARE).
```
I propose that it would be useful to explicitly state that `SELECT FOR KEY
SHARE` AND `SELECT FOR NO KEY UPDATE` commands also acquire the ROW SHARE
table level lock on target table(s). That is:
```
Conflicts with the EXCLUSIVE and ACCESS EXCLUSIVE lock modes.

The SELECT FOR UPDATE, SELECT FOR NO KEY UPDATE,  SELECT FOR SHARE, and
SELECT FOR KEY SHARE commands acquire a lock of this mode on the target
table(s) (in addition to ACCESS SHARE locks on any other tables that are
referenced but not selected FOR UPDATE/FOR SHARE).
```

Thank you for your time.

Re: Add further details to ROW SHARE table level lock modes section

From
Alvaro Herrera
Date:
On 2022-Apr-04, PG Doc comments form wrote:

> I propose that it would be useful to explicitly state that `SELECT FOR KEY
> SHARE` AND `SELECT FOR NO KEY UPDATE` commands also acquire the ROW SHARE
> table level lock on target table(s). That is:
> ```
> Conflicts with the EXCLUSIVE and ACCESS EXCLUSIVE lock modes.
> 
> The SELECT FOR UPDATE, SELECT FOR NO KEY UPDATE,  SELECT FOR SHARE, and
> SELECT FOR KEY SHARE commands acquire a lock of this mode on the target
> table(s) (in addition to ACCESS SHARE locks on any other tables that are
> referenced but not selected FOR UPDATE/FOR SHARE).
> ```

I agree we need an update here.  But the original wording seems a bit
off; I think we should say SELECT is a command, and that the FOR bits
are options thereof.  Maybe something like this:

        <para>
         The <command>SELECT</command> command acquires a lock of this mode
         on all tables on which one of the <option>FOR UPDATE</option>,
         <option>FOR NO KEY UPDATE</option>,
         <option>FOR SHARE</option>, or
         <option>FOR KEY SHARE</option> options is specified
         (in addition to <literal>ACCESS SHARE</literal> locks on any other
         tables that are referenced without any explicit
         <option>FOR ...</option> locking option).
        </para>

Thoughts?

Grammar check: "one of the a,b,c options IS specified" or "one of the
a,b,c options ARE specified"?

-- 
Álvaro Herrera         PostgreSQL Developer  —  https://www.EnterpriseDB.com/



Re: Add further details to ROW SHARE table level lock modes section

From
Erikjan Rijkers
Date:
Op 13-04-2022 om 20:00 schreef Alvaro Herrera:
> On 2022-Apr-04, PG Doc comments form wrote:
> 
>> I propose that it would be useful to explicitly state that `SELECT FOR KEY
>> SHARE` AND `SELECT FOR NO KEY UPDATE` commands also acquire the ROW SHARE
>> table level lock on target table(s). That is:
>> ```
>> Conflicts with the EXCLUSIVE and ACCESS EXCLUSIVE lock modes.
>>
>> The SELECT FOR UPDATE, SELECT FOR NO KEY UPDATE,  SELECT FOR SHARE, and
>> SELECT FOR KEY SHARE commands acquire a lock of this mode on the target
>> table(s) (in addition to ACCESS SHARE locks on any other tables that are
>> referenced but not selected FOR UPDATE/FOR SHARE).
>> ```
> 
> I agree we need an update here.  But the original wording seems a bit
> off; I think we should say SELECT is a command, and that the FOR bits
> are options thereof.  Maybe something like this:
> 
>          <para>
>           The <command>SELECT</command> command acquires a lock of this mode
>           on all tables on which one of the <option>FOR UPDATE</option>,
>           <option>FOR NO KEY UPDATE</option>,
>           <option>FOR SHARE</option>, or
>           <option>FOR KEY SHARE</option> options is specified
>           (in addition to <literal>ACCESS SHARE</literal> locks on any other
>           tables that are referenced without any explicit
>           <option>FOR ...</option> locking option).
>          </para>
> 
> Thoughts?
> 
> Grammar check: "one of the a,b,c options IS specified" or "one of the
> a,b,c options ARE specified"?


one [...] IS specified