Clear out values from dropped columns during REPACK (CONCURRENTLY) When repacking a table concurrently, some border conditions can cause a concurrent update to propagate the original old tuple to the transient table (such as a trigger that returns OLD). That's essentially just wasted space, which REPACK is there to remove. Prevent that by setting the isnull flag to true for any column cataloged as dropped in tuples being "replayed" as concurrent updates.
Reported-by: Radim Marek <[email protected]> Reviewed-by: Antonin Houska <[email protected]> Backpatch: 19 Discussion: https://postgr.es/m/CAJgoLkK2UBzB1J9buCsSUbjf7bOqz-o_0=ceitruu789bhb...@mail.gmail.com Branch ------ REL_19_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/10c67bcb2da6acb16ce77ff1a498532b26538dcc Modified Files -------------- src/backend/commands/repack.c | 36 +++++++---- .../injection_points/expected/repack_dropped.out | 47 ++++++++++++++ src/test/modules/injection_points/meson.build | 1 + .../injection_points/specs/repack_dropped.spec | 71 ++++++++++++++++++++++ 4 files changed, 144 insertions(+), 11 deletions(-)
