pgsql: Lock the TOAST table early in REPACK (CONCURRENTLY)

From: Álvaro Herrera <alvherre(at)kurilemu(dot)de>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Lock the TOAST table early in REPACK (CONCURRENTLY)
Date: 2026-09-28 15:13:43
Message-ID: E1xBD31-00000001cLE-3okb@gemulon.postgresql.org
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Lock the TOAST table early in REPACK (CONCURRENTLY)

The decoding worker records the relfilenumber of the TOAST table when it
starts, and skips changes stored under any other one, but the TOAST
table was not locked until the data copy began. If VACUUM FULL rewrote
it while the worker was starting, concurrent updates of TOASTed columns
were silently lost.

Fix by locking the TOAST table in cluster_rel() in the concurrent case,
before the worker starts.

Author: Shihao Zhong <zhong950419(at)gmail(dot)com>
Reported-by: Thom Brown <thom(at)linux(dot)com>
Backpatch-through: 19
Discussion: https://postgr.es/m/CAA-aLv5MF6BLL+BWvix2Yw+CBardtH43AofPReQunhDZPNBtuA@mail.gmail.com

Branch
------
REL_19_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/76a268273c87b8efda86a3a729f5b89c60f48882

Modified Files
--------------
src/backend/commands/repack.c | 34 ++++-
src/backend/commands/repack_worker.c | 5 +-
.../injection_points/expected/repack_toast.out | 152 ++++++++++++++++++++-
.../injection_points/specs/repack_toast.spec | 45 ++++++
4 files changed, 229 insertions(+), 7 deletions(-)

Responses

Browse pgsql-committers by date

  From Date Subject
Next Message Álvaro Herrera 2026-09-28 15:23:34 Re: pgsql: Lock the TOAST table early in REPACK (CONCURRENTLY)
Previous Message Amit Kapila 2026-09-28 12:52:36 pgsql: Update .abi-compliance-history for change in struct LogicalRepRe