From 683c865d1ef64659baaf139c07364ac13fd509ca Mon Sep 17 00:00:00 2001 From: Peter Geoghegan Date: Wed, 28 Dec 2022 14:29:29 -0800 Subject: [PATCH v1] Avoid unnecessary clog lookups when freezing. --- src/backend/access/heap/heapam.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index 34d83dc70..2d5cd9a33 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -6524,7 +6524,8 @@ heap_prepare_freeze_tuple(HeapTupleHeader tuple, xid, cutoffs->relfrozenxid))); freeze_xmin = TransactionIdPrecedes(xid, cutoffs->OldestXmin); - if (freeze_xmin && !TransactionIdDidCommit(xid)) + if (freeze_xmin && !HeapTupleHeaderXminCommitted(tuple) && + !TransactionIdDidCommit(xid)) ereport(ERROR, (errcode(ERRCODE_DATA_CORRUPTED), errmsg_internal("uncommitted xmin %u from before xid cutoff %u needs to be frozen", @@ -6674,6 +6675,7 @@ heap_prepare_freeze_tuple(HeapTupleHeader tuple, * lock). */ if (freeze_xmax && !HEAP_XMAX_IS_LOCKED_ONLY(tuple->t_infomask) && + (tuple->t_infomask & HEAP_XMAX_INVALID) == 0 && TransactionIdDidCommit(xid)) ereport(ERROR, (errcode(ERRCODE_DATA_CORRUPTED), -- 2.38.1