diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index e00dc6c1ca..e68746fc3b 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -5500,7 +5500,10 @@ FreezeMultiXactId(MultiXactId multi, uint16 t_infomask, if (TransactionIdPrecedes(xid, cutoff_xid)) { if (TransactionIdDidCommit(xid)) + { + xid = FrozenTransactionId; *flags = FRM_MARK_COMMITTED | FRM_RETURN_IS_XID; + } else { *flags |= FRM_INVALIDATE_XMAX; diff --git a/src/backend/access/heap/pruneheap.c b/src/backend/access/heap/pruneheap.c index 9a8db74cb9..561acd144a 100644 --- a/src/backend/access/heap/pruneheap.c +++ b/src/backend/access/heap/pruneheap.c @@ -435,7 +435,8 @@ heap_prune_chain(Relation relation, Buffer buffer, OffsetNumber rootoffnum, * Check the tuple XMIN against prior XMAX, if any */ if (TransactionIdIsValid(priorXmax) && - !TransactionIdEquals(HeapTupleHeaderGetXmin(htup), priorXmax)) + !TransactionIdEquals(HeapTupleHeaderGetXmin(htup), priorXmax) && + HeapTupleHeaderGetXmin(htup) != FrozenTransactionId) break; /*