pgsql: Don't lose column values on REPACK

From: Álvaro Herrera <alvherre(at)kurilemu(dot)de>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Don't lose column values on REPACK
Date: 2026-05-05 08:27:49
Message-ID: E1wKB89-000QwA-0z@gemulon.postgresql.org
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Don't lose column values on REPACK

Commit 28d534e2ae0a introduced reform_tuple() with a fast path that
returns the source tuple verbatim when no dropped columns require fixing
up. I (Álvaro) failed to realize that this broke handling of columns
with a 'missingval' defined: after a VACUUM FULL, CLUSTER, or REPACK
operation, the catalogued missingval is thrown away, so the tuples are
no longer correct.

Fix by forcing the rewrite when the tuple is shorter than the tuple
descriptor.

Author: Satya Narlapuram <satyanarlapuram(at)gmail(dot)com>
Discussion: https://postgr.es/m/CAHg+QDeoccU5CudrJpmSKZfKZ1gRMNY=5BxSC=JpHgkonzgcOw@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/eb2e2eb4d4cf31808f67a3f9cee77548308a4700

Modified Files
--------------
contrib/test_decoding/expected/repack.out | 22 +++++++++++++++++
contrib/test_decoding/sql/repack.sql | 9 +++++++
src/backend/access/heap/heapam_handler.c | 38 +++++++++++++++++++++++-------
src/test/regress/expected/fast_default.out | 36 ++++++++++++++++++++++++++++
src/test/regress/sql/fast_default.sql | 16 +++++++++++++
5 files changed, 112 insertions(+), 9 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Peter Eisentraut 2026-05-05 08:45:41 pgsql: Message style improvements (oauth related)
Previous Message Peter Eisentraut 2026-05-05 07:42:38 pgsql: Make spelling consistent