From d4b36daa6ddefae4e3548886f337d11ce284e692 Mon Sep 17 00:00:00 2001 From: Junwang Zhao Date: Tue, 17 Mar 2026 00:26:49 +0800 Subject: [PATCH] Fix startAttr computation for nocache attribute fetch Adjust nocache[heap|index]_getattr() to base the starting attcacheoff on the attribute before the first NULL, ensuring cached offsets are valid. --- src/backend/access/common/heaptuple.c | 2 +- src/backend/access/common/indextuple.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/access/common/heaptuple.c b/src/backend/access/common/heaptuple.c index 26f0c3bb2c4..31f64b0a31a 100644 --- a/src/backend/access/common/heaptuple.c +++ b/src/backend/access/common/heaptuple.c @@ -541,7 +541,7 @@ nocachegetattr(HeapTuple tup, * Start at the highest attcacheoff attribute with no NULLs in prior * attributes. */ - startAttr = Min(tupleDesc->firstNonCachedOffsetAttr - 1, firstNullAttr); + startAttr = Min(tupleDesc->firstNonCachedOffsetAttr - 1, Max(0, firstNullAttr - 1)); off = TupleDescCompactAttr(tupleDesc, startAttr)->attcacheoff; } else diff --git a/src/backend/access/common/indextuple.c b/src/backend/access/common/indextuple.c index 6ba09932ba6..7d0cf9b3ba7 100644 --- a/src/backend/access/common/indextuple.c +++ b/src/backend/access/common/indextuple.c @@ -267,7 +267,7 @@ nocache_index_getattr(IndexTuple tup, * Start at the highest attcacheoff attribute with no NULLs in prior * attributes. */ - startAttr = Min(tupleDesc->firstNonCachedOffsetAttr - 1, firstNullAttr); + startAttr = Min(tupleDesc->firstNonCachedOffsetAttr - 1, Max(0, firstNullAttr - 1)); off = TupleDescCompactAttr(tupleDesc, startAttr)->attcacheoff; } else -- 2.41.0