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
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