From 55843061ec10c4914618c3c5c4b3372142c6a19d Mon Sep 17 00:00:00 2001 From: Xiaoran Wang Date: Fri, 12 Jan 2024 01:49:52 +0800 Subject: [PATCH] Recheck the tuple visibility --- src/backend/access/heap/heapam_visibility.c | 2 ++ src/backend/utils/cache/catcache.c | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/backend/access/heap/heapam_visibility.c b/src/backend/access/heap/heapam_visibility.c index a716001341..251792fcc7 100644 --- a/src/backend/access/heap/heapam_visibility.c +++ b/src/backend/access/heap/heapam_visibility.c @@ -116,6 +116,8 @@ static inline void SetHintBits(HeapTupleHeader tuple, Buffer buffer, uint16 infomask, TransactionId xid) { + if (buffer == InvalidBuffer) + return; if (TransactionIdIsValid(xid)) { /* NB: xid must be known committed here! */ diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c index 2d72e8106c..1d11d7a7fb 100644 --- a/src/backend/utils/cache/catcache.c +++ b/src/backend/utils/cache/catcache.c @@ -15,6 +15,7 @@ #include "postgres.h" #include "access/genam.h" +#include "access/heapam.h" #include "access/heaptoast.h" #include "access/relscan.h" #include "access/sysattr.h" @@ -38,6 +39,7 @@ #include "utils/memutils.h" #include "utils/rel.h" #include "utils/resowner.h" +#include "utils/snapmgr.h" #include "utils/syscache.h" @@ -1954,10 +1956,9 @@ CatalogCacheCreateEntry(CatCache *cache, HeapTuple ntp, Datum *arguments, */ if (HeapTupleHasExternal(ntp)) { - uint64 inval_count = SharedInvalidMessageCounter; dtp = toast_flatten_tuple(ntp, cache->cc_tupdesc); - if (inval_count != SharedInvalidMessageCounter) + if (!HeapTupleSatisfiesVisibility(ntp, GetNonHistoricCatalogSnapshot(cache->cc_reloid), InvalidBuffer)) { heap_freetuple(dtp); return NULL; -- 2.39.2 (Apple Git-143)