Subject: (docs): add missing info about ShareLocks

From: Alpha Shuro <[email-masked]>
Date: Sat, 22 Nov 2025 09:07:01 +0100

Hello

I had a production incident a few weeks ago while using deferred indexes, where the Postgres docs lead me down the wrong path of investigation due to missing details. Specifically, the docs implied that a `ShareLock` was only acquired when creating indexes, but only after looking at the code did I learn that this lock is also acquired when transactions are waiting for other transactions to complete. I think this would be helpful to someone who might find themselves on the same path in the future, and as I understand it this mailing list is the way to submit patches to the docs?

---

From: Laurenz Albe <[email-masked]>
Date: Sat, 22 Nov 2025 13:07:57 +0100

On Sat, 2025-11-22 at 09:07 +0100, Alpha Shuro wrote:
> I had a production incident a few weeks ago while using deferred indexes, where
> the Postgres docs lead me down the wrong path of investigation due to missing details.
> Specifically, the docs implied that a `ShareLock` was only acquired when creating
> indexes, but only after looking at the code did I learn that this lock is also
> acquired when transactions are waiting for other transactions to complete.
> I think this would be helpful to someone who might find themselves on the same path
> in the future, and as I understand it this mailing list is the way to submit patches
> to the docs?

No, that is wrong.  This section is about table locks, and a lock on a transaction ID
should, if anywhere, be documented elsewhere.  Actually, there is already something
about transaction ID locks in https://www.postgresql.org/docs/current/xact-locking.html

Perhaps you could improve that short documentation?

Yours,
Laurenz Albe

PS: There are also SHARE locks on rows.

---

From: Alpha Shuro <[email-masked]>
Date: Thu, 27 Nov 2025 12:33:42 +0100

Ah thanks for pointing this out, I've moved it to the xact-locking page instead

> Den 22. nov. 2025 kl. 13.07 skrev Laurenz Albe <[email-masked]>:
>

---

From: Laurenz Albe <[email-masked]>
Date: Thu, 27 Nov 2025 14:49:48 +0100

> Ah thanks for pointing this out, I've moved it to the xact-locking page instead

I think that is too specific.  You can see a session waiting for a SHARE
lock on a transaction whenever it is waiting for a row lock, since row
locks are not permanently stored in the shared memory lock table.
Rather than adding a paragraph about the specific incident that happened
to you, you should describe the general mechanism.

Some reading material:
https://www.cybertec-postgresql.com/en/row-locks-in-postgresql/

Yours,
Laurenz Albe