| From: | Michael Paquier <michael(at)paquier(dot)xyz> |
|---|---|
| To: | pgsql-committers(at)lists(dot)postgresql(dot)org |
| Subject: | pgsql: Set HEAP_XMAX_INVALID for tuples updated by aborted subtransacti |
| Date: | 2026-10-26 00:55:35 |
| Message-ID: | E1xL8zv-00000000ljm-3Qbc@gemulon.postgresql.org |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-committers pgsql-hackers |
Set HEAP_XMAX_INVALID for tuples updated by aborted subtransaction
HeapTupleSatisfiesVacuumHorizon() did not set HEAP_XMAX_INVALID on a
tuple inserted, then updated by a subtransaction that rolled back.
rewriteheap.c relies on this hint to tell if such tuples should be
treated as updated and would drop them, causing rewrites to lose some
tuples.
HeapTupleSatisfiesVacuumHorizon() is updated to set the hint
HEAP_XMAX_INVALID, so as heap AM is able to redirect such a tuple to its
correct route, and does not lose it.
This issue impacted both CLUSTER (down to v14) and REPACK [USING] (down
to v19).
Reported-by: Alperen Keles <alpkeles99(at)gmail(dot)com>
Author: Shihao Zhong <zhong950419(at)gmail(dot)com>
Author: Michael Paquier <michael(at)paquier(dot)xyz>
Reported-by: Zhijie Hou <houzhijie22(at)gmail(dot)com>
Reported-by: Takeshi Ideriha <iderihatakeshi(at)gmail(dot)com>
Reported-by: Ayush Tiwari <ayushtiwari(dot)slg01(at)gmail(dot)com>
Discussion: https://postgr.es/m/19760-8f9a0eba17bc8c92@postgresql.org
Backpatch-through: 14
Branch
------
master
Details
-------
https://git.postgresql.org/pg/commitdiff/e7f4463e869cc006b7d3210c264d92b1016dcad2
Modified Files
--------------
src/backend/access/heap/heapam_visibility.c | 2 ++
src/test/regress/expected/cluster.out | 28 ++++++++++++++++++++++++++++
src/test/regress/sql/cluster.sql | 19 +++++++++++++++++++
3 files changed, 49 insertions(+)
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Richard Guo | 2026-10-26 01:07:06 | pgsql: Look through wrapper paths when collecting enforced clause seria |
| Previous Message | Daniel Gustafsson | 2026-10-25 23:30:35 | pgsql: Fix tab completion for concurrent matview refresh |
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Richard Guo | 2026-10-26 01:18:37 | Re: Wrong results from a parameterized Append |
| Previous Message | Tomas Vondra | 2026-10-26 00:53:13 | improving handling of FPIs during recovery prefetching |