Report relation extension blockers within parallel lock groups

From: Bertrand Drouvot <bertranddrouvot(dot)pg(at)gmail(dot)com>
To: pgsql-hackers(at)lists(dot)postgresql(dot)org
Cc: Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>
Subject: Report relation extension blockers within parallel lock groups
Date: 2026-08-31 02:39:19
Message-ID: apTpV8h+CYHf+1PJ@bdtpg
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi hackers,

While working on providing more informations related to locks (patch not shared
yet), it appeared that pg_blocking_pids() can omit the process that is actually
blocking a relation extension request.

Indeed, commit 85f6b49c2c53 made relation extension locks conflict between members
of the same parallel lock group, but did not update the same group filtering in
pg_blocking_pids().

The attached adds the relation extension exception in pg_blocking_pids().

pg_blocking_pids() reports parallel workers using their lock group leader PID.
Therefore, when one member of a parallel lock group blocks another, the PID
supplied to pg_blocking_pids() can appear in the result. This does not mean
that a process blocks itself. Rather, a lock held by one member of its parallel
lock group blocks a lock request made by another member of that group. The patch
documents this behavior.

No regression test is added because ensuring relation extension lock contention
between members of the same parallel lock group would be more complicated than
needed for this simple patch.

Regards,

--
Bertrand Drouvot
PostgreSQL Contributors Team
RDS Open Source Databases
Amazon Web Services: https://aws.amazon.com

Attachment Content-Type Size
v1-0001-Report-relation-extension-blockers-within-paralle.patch text/x-diff 3.6 KB

Browse pgsql-hackers by date

  From Date Subject
Next Message Michael Paquier 2026-08-31 02:43:52 Re: WAIT FOR command should do some query jumbling
Previous Message shihao zhong 2026-08-31 02:21:21 [PATCH] Add row estimate tests for unnest() and integer generate_series()