v1-0001-Avoid-unnecessary-clog-lookups-when-freezing.patch

application/octet-stream

Filename: v1-0001-Avoid-unnecessary-clog-lookups-when-freezing.patch
Type: application/octet-stream
Part: 0
Message: Avoiding unnecessary clog lookups while freezing

Patch

Format: format-patch
Series: patch v1-0001
Subject: Avoid unnecessary clog lookups when freezing.
File+
src/backend/access/heap/heapam.c 3 1
From 683c865d1ef64659baaf139c07364ac13fd509ca Mon Sep 17 00:00:00 2001
From: Peter Geoghegan <pg@bowt.ie>
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