Hi all,
(Tom and Andres in CC, as they've commented on the original "round 1"
thread)

In order to add support of 8-byte TOAST values, one item that I have
on my list of items is a set of renames in the varatt.h definitions
for some objects, as of:
- varatt_external -> varatt_external_oid
- VARTAG_ONDISK -> VARTAG_ONDISK_OID
- TOAST_POINTER_SIZE -> TOAST_OID_POINTER_SIZE
- TOAST_MAX_CHUNK_SIZE -> TOAST_OID_MAX_CHUNK_SIZE
- Few macros in varatt.h.
- (I'm aware of the control file bit, left out on purpose as its
tracking is still valid even if we extend to 8 bytes.)

This is related to the following, larger patch set, but I wanted to
make a last call before proceeding as it is hidden in a much larger
set of patches:
https://www.postgresql.org/message-id/flat/[email protected]

Tom has commented about this part of the patch here, presented in
0003:
https://www.postgresql.org/message-id/[email protected]

This is a more ambitious version of it, with more mechanical renames
to make the difference between the OID and OID8 flavors of the
pointers.

One point of the renames is to make extension folks aware of the fact
that the new TOAST structures may need handling due to the new 8-byte
values.  Still, I also feel guilty to not provide a set of
compatibility definitions, which is of course one option.  Note that
I'm planning to do all that early in the release cycle for v20, to get
room for it.

Rebased on HEAD is the patch I have for staging.  Any thoughts,
comments or objections?
--
Michael
From 39b49fbd256b761a917c06ef9321e57ba066f4ef Mon Sep 17 00:00:00 2001
From: Michael Paquier <[email protected]>
Date: Fri, 4 Sep 2026 08:29:08 +0900
Subject: [PATCH] Rename varatt_external to varatt_external_oid

This impacts a few more definitions, related to this structure, as of:
- VARTAG_ONDISK -> VARTAG_ONDISK_OID
- TOAST_POINTER_SIZE -> TOAST_OID_POINTER_SIZE
- TOAST_MAX_CHUNK_SIZE -> TOAST_OID_MAX_CHUNK_SIZE
- Macros in varatt.h for varatt_external_oid.

This rename is in preparation of a follow-up patch to add support for
8-byte TOAST values, where we need to make the distinction between the
OID and OID8 variants.

Author: Michael Paquier <[email protected]>
Reviewed-by: Yugo Nagata <[email protected]>
Reviewed-by: Bharath Rupireddy <[email protected]>
Discussion: 
https://postgr.es/m/CALj2ACVnO6jjs5aRx3dSOBy9LV7=iakpbr1eovoeb8rl8q4...@mail.gmail.com
---
 src/include/access/detoast.h                  |  4 +--
 src/include/access/heaptoast.h                |  6 ++--
 src/include/varatt.h                          | 36 ++++++++++---------
 src/backend/access/common/detoast.c           | 30 ++++++++--------
 src/backend/access/common/toast_compression.c |  6 ++--
 src/backend/access/common/toast_internals.c   | 16 ++++-----
 src/backend/access/heap/heaptoast.c           | 20 ++++++-----
 src/backend/access/table/toast_helper.c       |  4 +--
 src/backend/access/transam/xlog.c             |  8 ++---
 .../replication/logical/reorderbuffer.c       |  6 ++--
 src/backend/utils/adt/varlena.c               |  2 +-
 src/bin/pg_resetwal/pg_resetwal.c             |  2 +-
 doc/src/sgml/storage.sgml                     |  2 +-
 contrib/amcheck/verify_heapam.c               | 23 +++++++-----
 src/tools/pgindent/typedefs.list              |  2 +-
 15 files changed, 90 insertions(+), 77 deletions(-)

diff --git a/src/include/access/detoast.h b/src/include/access/detoast.h
index fbd98181a3a1..2b1428b1e81c 100644
--- a/src/include/access/detoast.h
+++ b/src/include/access/detoast.h
@@ -14,7 +14,7 @@
 
 /*
  * Macro to fetch the possibly-unaligned contents of an EXTERNAL datum
- * into a local "varatt_external" toast pointer.  This should be
+ * into a local "varatt_external_oid" toast pointer.  This should be
  * just a memcpy, but some versions of gcc seem to produce broken code
  * that assumes the datum contents are aligned.  Introducing an explicit
  * intermediate "varattrib_1b_e *" variable seems to fix it.
@@ -28,7 +28,7 @@ do { \
 } while (0)
 
 /* Size of an EXTERNAL datum that contains a standard TOAST pointer */
-#define TOAST_POINTER_SIZE (VARHDRSZ_EXTERNAL + sizeof(varatt_external))
+#define TOAST_OID_POINTER_SIZE (VARHDRSZ_EXTERNAL + 
sizeof(varatt_external_oid))
 
 /* Size of an EXTERNAL datum that contains an indirection pointer */
 #define INDIRECT_POINTER_SIZE (VARHDRSZ_EXTERNAL + sizeof(varatt_indirect))
diff --git a/src/include/access/heaptoast.h b/src/include/access/heaptoast.h
index 631cb1836b96..b2346fd75bd4 100644
--- a/src/include/access/heaptoast.h
+++ b/src/include/access/heaptoast.h
@@ -69,19 +69,19 @@
 
 /*
  * When we store an oversize datum externally, we divide it into chunks
- * containing at most TOAST_MAX_CHUNK_SIZE data bytes.  This number *must*
+ * containing at most TOAST_OID_MAX_CHUNK_SIZE data bytes.  This number *must*
  * be small enough that the completed toast-table tuple (including the
  * ID and sequence fields and all overhead) will fit on a page.
  * The coding here sets the size on the theory that we want to fit
  * EXTERN_TUPLES_PER_PAGE tuples of maximum size onto a page.
  *
- * NB: Changing TOAST_MAX_CHUNK_SIZE requires an initdb.
+ * NB: Changing TOAST_OID_MAX_CHUNK_SIZE requires an initdb.
  */
 #define EXTERN_TUPLES_PER_PAGE 4       /* tweak only this */
 
 #define EXTERN_TUPLE_MAX_SIZE  MaximumBytesPerTuple(EXTERN_TUPLES_PER_PAGE)
 
-#define TOAST_MAX_CHUNK_SIZE   \
+#define TOAST_OID_MAX_CHUNK_SIZE       \
        (EXTERN_TUPLE_MAX_SIZE -                                                
        \
         MAXALIGN(SizeofHeapTupleHeader) -                                      
\
         sizeof(Oid) -                                                          
                \
diff --git a/src/include/varatt.h b/src/include/varatt.h
index 000bdf33b923..33979bbaaad1 100644
--- a/src/include/varatt.h
+++ b/src/include/varatt.h
@@ -16,7 +16,7 @@
 #define VARATT_H
 
 /*
- * varatt_external is a traditional "TOAST pointer", that is, the
+ * varatt_external_oid is a traditional "TOAST pointer", that is, the
  * information needed to fetch a Datum stored out-of-line in a TOAST table.
  * The data is compressed if and only if the external size stored in
  * va_extinfo is less than va_rawsize - VARHDRSZ.
@@ -29,14 +29,14 @@
  * you can look at these fields!  (The reason we use memcmp is to avoid
  * having to do that just to detect equality of two TOAST pointers...)
  */
-typedef struct varatt_external
+typedef struct varatt_external_oid
 {
        int32           va_rawsize;             /* Original data size (includes 
header) */
        uint32          va_extinfo;             /* External saved size (without 
header) and
                                                                 * compression 
method */
        Oid                     va_valueid;             /* Unique ID of value 
within TOAST table */
        Oid                     va_toastrelid;  /* RelID of TOAST table 
containing it */
-} varatt_external;
+} varatt_external_oid;
 
 /*
  * These macros define the "saved size" portion of va_extinfo.  Its remaining
@@ -51,7 +51,7 @@ typedef struct varatt_external
  * The creator of such a Datum is entirely responsible that the referenced
  * storage survives for as long as referencing pointer Datums can exist.
  *
- * Note that just as for varatt_external, this struct is stored
+ * Note that just as for varatt_external_oid, this struct is stored
  * unaligned within any containing tuple.
  */
 typedef struct varatt_indirect
@@ -66,7 +66,7 @@ typedef struct varatt_indirect
  * storage.  APIs for this, in particular the definition of struct
  * ExpandedObjectHeader, are in src/include/utils/expandeddatum.h.
  *
- * Note that just as for varatt_external, this struct is stored
+ * Note that just as for varatt_external_oid, this struct is stored
  * unaligned within any containing tuple.
  */
 typedef struct ExpandedObjectHeader ExpandedObjectHeader;
@@ -78,15 +78,16 @@ typedef struct varatt_expanded
 
 /*
  * Type tag for the various sorts of "TOAST pointer" datums.  The peculiar
- * value for VARTAG_ONDISK comes from a requirement for on-disk compatibility
- * with a previous notion that the tag field was the pointer datum's length.
+ * value for VARTAG_ONDISK_OID comes from a requirement for on-disk
+ * compatibility with a previous notion that the tag field was the pointer
+ * datum's length.
  */
 typedef enum vartag_external
 {
        VARTAG_INDIRECT = 1,
        VARTAG_EXPANDED_RO = 2,
        VARTAG_EXPANDED_RW = 3,
-       VARTAG_ONDISK = 18
+       VARTAG_ONDISK_OID = 18
 } vartag_external;
 
 /* Is a TOAST pointer either type of expanded-object pointer? */
@@ -105,8 +106,8 @@ VARTAG_SIZE(vartag_external tag)
                return sizeof(varatt_indirect);
        else if (VARTAG_IS_EXPANDED(tag))
                return sizeof(varatt_expanded);
-       else if (tag == VARTAG_ONDISK)
-               return sizeof(varatt_external);
+       else if (tag == VARTAG_ONDISK_OID)
+               return sizeof(varatt_external_oid);
        else
        {
                Assert(false);
@@ -360,7 +361,7 @@ VARATT_IS_EXTERNAL(const void *PTR)
 static inline bool
 VARATT_IS_EXTERNAL_ONDISK(const void *PTR)
 {
-       return VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_ONDISK;
+       return VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == 
VARTAG_ONDISK_OID;
 }
 
 /* Is varlena datum an indirect pointer? */
@@ -502,15 +503,18 @@ VARDATA_COMPRESSED_GET_COMPRESS_METHOD(const void *PTR)
        return ((const varattrib_4b *) PTR)->va_compressed.va_tcinfo >> 
VARLENA_EXTSIZE_BITS;
 }
 
-/* Same for external Datums; but note argument is a varatt_external */
+/*
+ * Same for external Datums; but note argument is a struct
+ * varatt_external_oid.
+ */
 static inline Size
-VARATT_EXTERNAL_GET_EXTSIZE(varatt_external toast_pointer)
+VARATT_EXTERNAL_OID_GET_EXTSIZE(varatt_external_oid toast_pointer)
 {
        return toast_pointer.va_extinfo & VARLENA_EXTSIZE_MASK;
 }
 
 static inline uint32
-VARATT_EXTERNAL_GET_COMPRESS_METHOD(varatt_external toast_pointer)
+VARATT_EXTERNAL_OID_GET_COMPRESS_METHOD(varatt_external_oid toast_pointer)
 {
        return toast_pointer.va_extinfo >> VARLENA_EXTSIZE_BITS;
 }
@@ -533,9 +537,9 @@ VARATT_EXTERNAL_GET_COMPRESS_METHOD(varatt_external 
toast_pointer)
  * actually saves space, so we expect either equality or less-than.
  */
 static inline bool
-VARATT_EXTERNAL_IS_COMPRESSED(varatt_external toast_pointer)
+VARATT_EXTERNAL_OID_IS_COMPRESSED(varatt_external_oid toast_pointer)
 {
-       return VARATT_EXTERNAL_GET_EXTSIZE(toast_pointer) <
+       return VARATT_EXTERNAL_OID_GET_EXTSIZE(toast_pointer) <
                (Size) (toast_pointer.va_rawsize - VARHDRSZ);
 }
 
diff --git a/src/backend/access/common/detoast.c 
b/src/backend/access/common/detoast.c
index a6c1f3a734b2..a50aea7b6b12 100644
--- a/src/backend/access/common/detoast.c
+++ b/src/backend/access/common/detoast.c
@@ -225,12 +225,12 @@ detoast_attr_slice(varlena *attr,
 
        if (VARATT_IS_EXTERNAL_ONDISK(attr))
        {
-               varatt_external toast_pointer;
+               varatt_external_oid toast_pointer;
 
                VARATT_EXTERNAL_GET_POINTER(toast_pointer, attr);
 
                /* fast path for non-compressed external datums */
-               if (!VARATT_EXTERNAL_IS_COMPRESSED(toast_pointer))
+               if (!VARATT_EXTERNAL_OID_IS_COMPRESSED(toast_pointer))
                        return toast_fetch_datum_slice(attr, sliceoffset, 
slicelength);
 
                /*
@@ -240,7 +240,7 @@ detoast_attr_slice(varlena *attr,
                 */
                if (slicelimit >= 0)
                {
-                       int32           max_size = 
VARATT_EXTERNAL_GET_EXTSIZE(toast_pointer);
+                       int32           max_size = 
VARATT_EXTERNAL_OID_GET_EXTSIZE(toast_pointer);
 
                        /*
                         * Determine maximum amount of compressed data needed 
for a prefix
@@ -251,7 +251,7 @@ detoast_attr_slice(varlena *attr,
                         * determine how much compressed data we need to be 
sure of being
                         * able to decompress the required slice.
                         */
-                       if (VARATT_EXTERNAL_GET_COMPRESS_METHOD(toast_pointer) 
==
+                       if 
(VARATT_EXTERNAL_OID_GET_COMPRESS_METHOD(toast_pointer) ==
                                TOAST_PGLZ_COMPRESSION_ID)
                                max_size = 
pglz_maximum_compressed_size(slicelimit, max_size);
 
@@ -344,7 +344,7 @@ toast_fetch_datum(varlena *attr)
 {
        Relation        toastrel;
        varlena    *result;
-       varatt_external toast_pointer;
+       varatt_external_oid toast_pointer;
        int32           attrsize;
 
        if (!VARATT_IS_EXTERNAL_ONDISK(attr))
@@ -353,11 +353,11 @@ toast_fetch_datum(varlena *attr)
        /* Must copy to access aligned fields */
        VARATT_EXTERNAL_GET_POINTER(toast_pointer, attr);
 
-       attrsize = VARATT_EXTERNAL_GET_EXTSIZE(toast_pointer);
+       attrsize = VARATT_EXTERNAL_OID_GET_EXTSIZE(toast_pointer);
 
        result = (varlena *) palloc(attrsize + VARHDRSZ);
 
-       if (VARATT_EXTERNAL_IS_COMPRESSED(toast_pointer))
+       if (VARATT_EXTERNAL_OID_IS_COMPRESSED(toast_pointer))
                SET_VARSIZE_COMPRESSED(result, attrsize + VARHDRSZ);
        else
                SET_VARSIZE(result, attrsize + VARHDRSZ);
@@ -398,7 +398,7 @@ toast_fetch_datum_slice(varlena *attr, int32 sliceoffset,
 {
        Relation        toastrel;
        varlena    *result;
-       varatt_external toast_pointer;
+       varatt_external_oid toast_pointer;
        int32           attrsize;
 
        if (!VARATT_IS_EXTERNAL_ONDISK(attr))
@@ -412,9 +412,9 @@ toast_fetch_datum_slice(varlena *attr, int32 sliceoffset,
         * prefix -- this isn't lo_* we can't return a compressed datum which is
         * meaningful to toast later.
         */
-       Assert(!VARATT_EXTERNAL_IS_COMPRESSED(toast_pointer) || 0 == 
sliceoffset);
+       Assert(!VARATT_EXTERNAL_OID_IS_COMPRESSED(toast_pointer) || 0 == 
sliceoffset);
 
-       attrsize = VARATT_EXTERNAL_GET_EXTSIZE(toast_pointer);
+       attrsize = VARATT_EXTERNAL_OID_GET_EXTSIZE(toast_pointer);
 
        if (sliceoffset >= attrsize)
        {
@@ -427,7 +427,7 @@ toast_fetch_datum_slice(varlena *attr, int32 sliceoffset,
         * space required by va_tcinfo, which is stored at the beginning as an
         * int32 value.
         */
-       if (VARATT_EXTERNAL_IS_COMPRESSED(toast_pointer) && slicelength > 0)
+       if (VARATT_EXTERNAL_OID_IS_COMPRESSED(toast_pointer) && slicelength > 0)
                slicelength = slicelength + sizeof(int32);
 
        /*
@@ -440,7 +440,7 @@ toast_fetch_datum_slice(varlena *attr, int32 sliceoffset,
 
        result = (varlena *) palloc(slicelength + VARHDRSZ);
 
-       if (VARATT_EXTERNAL_IS_COMPRESSED(toast_pointer))
+       if (VARATT_EXTERNAL_OID_IS_COMPRESSED(toast_pointer))
                SET_VARSIZE_COMPRESSED(result, slicelength + VARHDRSZ);
        else
                SET_VARSIZE(result, slicelength + VARHDRSZ);
@@ -550,7 +550,7 @@ toast_raw_datum_size(Datum value)
        if (VARATT_IS_EXTERNAL_ONDISK(attr))
        {
                /* va_rawsize is the size of the original datum -- including 
header */
-               varatt_external toast_pointer;
+               varatt_external_oid toast_pointer;
 
                VARATT_EXTERNAL_GET_POINTER(toast_pointer, attr);
                result = toast_pointer.va_rawsize;
@@ -610,10 +610,10 @@ toast_datum_size(Datum value)
                 * compressed or not.  We do not count the size of the toast 
pointer
                 * ... should we?
                 */
-               varatt_external toast_pointer;
+               varatt_external_oid toast_pointer;
 
                VARATT_EXTERNAL_GET_POINTER(toast_pointer, attr);
-               result = VARATT_EXTERNAL_GET_EXTSIZE(toast_pointer);
+               result = VARATT_EXTERNAL_OID_GET_EXTSIZE(toast_pointer);
        }
        else if (VARATT_IS_EXTERNAL_INDIRECT(attr))
        {
diff --git a/src/backend/access/common/toast_compression.c 
b/src/backend/access/common/toast_compression.c
index 5a5d579494a2..3b1bd6519261 100644
--- a/src/backend/access/common/toast_compression.c
+++ b/src/backend/access/common/toast_compression.c
@@ -262,12 +262,12 @@ toast_get_compression_id(varlena *attr)
         */
        if (VARATT_IS_EXTERNAL_ONDISK(attr))
        {
-               varatt_external toast_pointer;
+               varatt_external_oid toast_pointer;
 
                VARATT_EXTERNAL_GET_POINTER(toast_pointer, attr);
 
-               if (VARATT_EXTERNAL_IS_COMPRESSED(toast_pointer))
-                       cmid = 
VARATT_EXTERNAL_GET_COMPRESS_METHOD(toast_pointer);
+               if (VARATT_EXTERNAL_OID_IS_COMPRESSED(toast_pointer))
+                       cmid = 
VARATT_EXTERNAL_OID_GET_COMPRESS_METHOD(toast_pointer);
        }
        else if (VARATT_IS_COMPRESSED(attr))
                cmid = VARDATA_COMPRESSED_GET_COMPRESS_METHOD(attr);
diff --git a/src/backend/access/common/toast_internals.c 
b/src/backend/access/common/toast_internals.c
index 77d42e7ed65a..0f234661bfa9 100644
--- a/src/backend/access/common/toast_internals.c
+++ b/src/backend/access/common/toast_internals.c
@@ -124,7 +124,7 @@ toast_save_datum(Relation rel, Datum value,
        TupleDesc       toasttupDesc;
        CommandId       mycid = GetCurrentCommandId(true);
        varlena    *result;
-       varatt_external toast_pointer;
+       varatt_external_oid toast_pointer;
        int32           chunk_seq = 0;
        char       *data_p;
        int32           data_todo;
@@ -176,7 +176,7 @@ toast_save_datum(Relation rel, Datum value,
                VARATT_EXTERNAL_SET_SIZE_AND_COMPRESS_METHOD(toast_pointer, 
data_todo,
                                                                                
                         VARDATA_COMPRESSED_GET_COMPRESS_METHOD(dval));
                /* Assert that the numbers look like it's compressed */
-               Assert(VARATT_EXTERNAL_IS_COMPRESSED(toast_pointer));
+               Assert(VARATT_EXTERNAL_OID_IS_COMPRESSED(toast_pointer));
        }
        else
        {
@@ -225,7 +225,7 @@ toast_save_datum(Relation rel, Datum value,
                toast_pointer.va_valueid = InvalidOid;
                if (oldexternal != NULL)
                {
-                       varatt_external old_toast_pointer;
+                       varatt_external_oid old_toast_pointer;
 
                        Assert(VARATT_IS_EXTERNAL_ONDISK(oldexternal));
                        /* Must copy to access aligned fields */
@@ -289,7 +289,7 @@ toast_save_datum(Relation rel, Datum value,
                {
                        alignas(int32) varlena hdr;
                        /* this is to make the union big enough for a chunk: */
-                       char            data[TOAST_MAX_CHUNK_SIZE + VARHDRSZ];
+                       char            data[TOAST_OID_MAX_CHUNK_SIZE + 
VARHDRSZ];
                }                       chunk_data;
                int32           chunk_size;
 
@@ -298,7 +298,7 @@ toast_save_datum(Relation rel, Datum value,
                /*
                 * Calculate the size of this chunk
                 */
-               chunk_size = Min(TOAST_MAX_CHUNK_SIZE, data_todo);
+               chunk_size = Min(TOAST_OID_MAX_CHUNK_SIZE, data_todo);
 
                /*
                 * Build a tuple and store it
@@ -359,8 +359,8 @@ toast_save_datum(Relation rel, Datum value,
        /*
         * Create the TOAST pointer value that we'll return
         */
-       result = (varlena *) palloc(TOAST_POINTER_SIZE);
-       SET_VARTAG_EXTERNAL(result, VARTAG_ONDISK);
+       result = (varlena *) palloc(TOAST_OID_POINTER_SIZE);
+       SET_VARTAG_EXTERNAL(result, VARTAG_ONDISK_OID);
        memcpy(VARDATA_EXTERNAL(result), &toast_pointer, sizeof(toast_pointer));
 
        return PointerGetDatum(result);
@@ -376,7 +376,7 @@ void
 toast_delete_datum(Relation rel, Datum value, bool is_speculative)
 {
        varlena    *attr = (varlena *) DatumGetPointer(value);
-       varatt_external toast_pointer;
+       varatt_external_oid toast_pointer;
        Relation        toastrel;
        Relation   *toastidxs;
        ScanKeyData toastkey;
diff --git a/src/backend/access/heap/heaptoast.c 
b/src/backend/access/heap/heaptoast.c
index 03f885a25b07..3b7c658a90e6 100644
--- a/src/backend/access/heap/heaptoast.c
+++ b/src/backend/access/heap/heaptoast.c
@@ -634,11 +634,12 @@ heap_fetch_toast_slice(Relation toastrel, Oid valueid, 
int32 attrsize,
        SysScanDesc toastscan;
        HeapTuple       ttup;
        int32           expectedchunk;
-       int32           totalchunks = ((attrsize - 1) / TOAST_MAX_CHUNK_SIZE) + 
1;
+       int32           totalchunks;
        int                     startchunk;
        int                     endchunk;
        int                     num_indexes;
        int                     validIndex;
+       int32           max_chunk_size;
 
        /* Look for the valid index of toast relation */
        validIndex = toast_open_indexes(toastrel,
@@ -646,8 +647,11 @@ heap_fetch_toast_slice(Relation toastrel, Oid valueid, 
int32 attrsize,
                                                                        
&toastidxs,
                                                                        
&num_indexes);
 
-       startchunk = sliceoffset / TOAST_MAX_CHUNK_SIZE;
-       endchunk = (sliceoffset + slicelength - 1) / TOAST_MAX_CHUNK_SIZE;
+       max_chunk_size = TOAST_OID_MAX_CHUNK_SIZE;
+
+       totalchunks = ((attrsize - 1) / max_chunk_size) + 1;
+       startchunk = sliceoffset / max_chunk_size;
+       endchunk = (sliceoffset + slicelength - 1) / max_chunk_size;
        Assert(endchunk <= totalchunks);
 
        /* Set up a scan key to fetch from the index. */
@@ -747,8 +751,8 @@ heap_fetch_toast_slice(Relation toastrel, Oid valueid, 
int32 attrsize,
                                                                         
curchunk,
                                                                         
startchunk, endchunk, valueid,
                                                                         
RelationGetRelationName(toastrel))));
-               expected_size = curchunk < totalchunks - 1 ? 
TOAST_MAX_CHUNK_SIZE
-                       : attrsize - ((totalchunks - 1) * TOAST_MAX_CHUNK_SIZE);
+               expected_size = curchunk < totalchunks - 1 ? max_chunk_size
+                       : attrsize - ((totalchunks - 1) * max_chunk_size);
                if (chunksize != expected_size)
                        ereport(ERROR,
                                        (errcode(ERRCODE_DATA_CORRUPTED),
@@ -763,12 +767,12 @@ heap_fetch_toast_slice(Relation toastrel, Oid valueid, 
int32 attrsize,
                chcpystrt = 0;
                chcpyend = chunksize - 1;
                if (curchunk == startchunk)
-                       chcpystrt = sliceoffset % TOAST_MAX_CHUNK_SIZE;
+                       chcpystrt = sliceoffset % max_chunk_size;
                if (curchunk == endchunk)
-                       chcpyend = (sliceoffset + slicelength - 1) % 
TOAST_MAX_CHUNK_SIZE;
+                       chcpyend = (sliceoffset + slicelength - 1) % 
max_chunk_size;
 
                memcpy(VARDATA(result) +
-                          curchunk * TOAST_MAX_CHUNK_SIZE - sliceoffset + 
chcpystrt,
+                          (curchunk * max_chunk_size - sliceoffset) + 
chcpystrt,
                           chunkdata + chcpystrt,
                           (chcpyend - chcpystrt) + 1);
 
diff --git a/src/backend/access/table/toast_helper.c 
b/src/backend/access/table/toast_helper.c
index 2f2022d99510..6f2d691cc681 100644
--- a/src/backend/access/table/toast_helper.c
+++ b/src/backend/access/table/toast_helper.c
@@ -171,7 +171,7 @@ toast_tuple_init(ToastTupleContext *ttc)
  * The column must have attstorage EXTERNAL or EXTENDED if check_main is
  * false, and must have attstorage MAIN if check_main is true.
  *
- * The column must have a minimum size of MAXALIGN(TOAST_POINTER_SIZE);
+ * The column must have a minimum size of MAXALIGN(TOAST_OID_POINTER_SIZE);
  * if not, no benefit is to be expected by compressing it.
  *
  * The return value is the index of the biggest suitable column, or
@@ -184,7 +184,7 @@ toast_tuple_find_biggest_attribute(ToastTupleContext *ttc,
        TupleDesc       tupleDesc = ttc->ttc_rel->rd_att;
        int                     numAttrs = tupleDesc->natts;
        int                     biggest_attno = -1;
-       int32           biggest_size = MAXALIGN(TOAST_POINTER_SIZE);
+       int32           biggest_size = MAXALIGN(TOAST_OID_POINTER_SIZE);
        int32           skip_colflags = TOASTCOL_IGNORE;
        int                     i;
 
diff --git a/src/backend/access/transam/xlog.c 
b/src/backend/access/transam/xlog.c
index 2e3f177100b0..3203f2fd4ee2 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -4324,7 +4324,7 @@ WriteControlFile(void)
        ControlFile->nameDataLen = NAMEDATALEN;
        ControlFile->indexMaxKeys = INDEX_MAX_KEYS;
 
-       ControlFile->toast_max_chunk_size = TOAST_MAX_CHUNK_SIZE;
+       ControlFile->toast_max_chunk_size = TOAST_OID_MAX_CHUNK_SIZE;
        ControlFile->loblksize = LOBLKSIZE;
 
        ControlFile->float8ByVal = true;        /* vestigial */
@@ -4577,15 +4577,15 @@ ReadControlFile(void)
                                                   "INDEX_MAX_KEYS", 
ControlFile->indexMaxKeys,
                                                   "INDEX_MAX_KEYS", 
INDEX_MAX_KEYS),
                                 errhint("It looks like you need to recompile 
or initdb.")));
-       if (ControlFile->toast_max_chunk_size != TOAST_MAX_CHUNK_SIZE)
+       if (ControlFile->toast_max_chunk_size != TOAST_OID_MAX_CHUNK_SIZE)
                ereport(FATAL,
                                
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
                                 errmsg("database files are incompatible with 
server"),
                /* translator: %s is a variable name and %d is its value */
                                 errdetail("The database cluster was 
initialized with %s %d,"
                                                   " but the server was 
compiled with %s %d.",
-                                                  "TOAST_MAX_CHUNK_SIZE", 
ControlFile->toast_max_chunk_size,
-                                                  "TOAST_MAX_CHUNK_SIZE", 
(int) TOAST_MAX_CHUNK_SIZE),
+                                                  "TOAST_OID_MAX_CHUNK_SIZE", 
ControlFile->toast_max_chunk_size,
+                                                  "TOAST_OID_MAX_CHUNK_SIZE", 
(int) TOAST_OID_MAX_CHUNK_SIZE),
                                 errhint("It looks like you need to recompile 
or initdb.")));
        if (ControlFile->loblksize != LOBLKSIZE)
                ereport(FATAL,
diff --git a/src/backend/replication/logical/reorderbuffer.c 
b/src/backend/replication/logical/reorderbuffer.c
index 900864afc6db..457d544eec93 100644
--- a/src/backend/replication/logical/reorderbuffer.c
+++ b/src/backend/replication/logical/reorderbuffer.c
@@ -5168,7 +5168,7 @@ ReorderBufferToastReplace(ReorderBuffer *rb, 
ReorderBufferTXN *txn,
                varlena    *varlena_pointer;
 
                /* va_rawsize is the size of the original datum -- including 
header */
-               varatt_external toast_pointer;
+               varatt_external_oid toast_pointer;
                varatt_indirect redirect_pointer;
                varlena    *new_datum = NULL;
                varlena    *reconstructed;
@@ -5236,10 +5236,10 @@ ReorderBufferToastReplace(ReorderBuffer *rb, 
ReorderBufferTXN *txn,
                                   VARSIZE(chunk) - VARHDRSZ);
                        data_done += VARSIZE(chunk) - VARHDRSZ;
                }
-               Assert(data_done == VARATT_EXTERNAL_GET_EXTSIZE(toast_pointer));
+               Assert(data_done == 
VARATT_EXTERNAL_OID_GET_EXTSIZE(toast_pointer));
 
                /* make sure its marked as compressed or not */
-               if (VARATT_EXTERNAL_IS_COMPRESSED(toast_pointer))
+               if (VARATT_EXTERNAL_OID_IS_COMPRESSED(toast_pointer))
                        SET_VARSIZE_COMPRESSED(reconstructed, data_done + 
VARHDRSZ);
                else
                        SET_VARSIZE(reconstructed, data_done + VARHDRSZ);
diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c
index c5fd78f891ea..e5632d930682 100644
--- a/src/backend/utils/adt/varlena.c
+++ b/src/backend/utils/adt/varlena.c
@@ -4261,7 +4261,7 @@ pg_column_toast_chunk_id(PG_FUNCTION_ARGS)
 {
        int                     typlen;
        varlena    *attr;
-       varatt_external toast_pointer;
+       varatt_external_oid toast_pointer;
 
        /* On first call, get the input type's typlen, and save at *fn_extra */
        if (fcinfo->flinfo->fn_extra == NULL)
diff --git a/src/bin/pg_resetwal/pg_resetwal.c 
b/src/bin/pg_resetwal/pg_resetwal.c
index 1542a56ca4b1..79f3085d7696 100644
--- a/src/bin/pg_resetwal/pg_resetwal.c
+++ b/src/bin/pg_resetwal/pg_resetwal.c
@@ -737,7 +737,7 @@ GuessControlValues(void)
        ControlFile.xlog_seg_size = DEFAULT_XLOG_SEG_SIZE;
        ControlFile.nameDataLen = NAMEDATALEN;
        ControlFile.indexMaxKeys = INDEX_MAX_KEYS;
-       ControlFile.toast_max_chunk_size = TOAST_MAX_CHUNK_SIZE;
+       ControlFile.toast_max_chunk_size = TOAST_OID_MAX_CHUNK_SIZE;
        ControlFile.loblksize = LOBLKSIZE;
        ControlFile.float8ByVal = true; /* vestigial */
 
diff --git a/doc/src/sgml/storage.sgml b/doc/src/sgml/storage.sgml
index 19924b98d71d..90aae3defcbc 100644
--- a/doc/src/sgml/storage.sgml
+++ b/doc/src/sgml/storage.sgml
@@ -417,7 +417,7 @@ described in more detail below.
 
 <para>
 Out-of-line values are divided (after compression if used) into chunks of at
-most <symbol>TOAST_MAX_CHUNK_SIZE</symbol> bytes (by default this value is 
chosen
+most <symbol>TOAST_OID_MAX_CHUNK_SIZE</symbol> bytes (by default this value is 
chosen
 so that four chunk rows will fit on a page, making it about 2000 bytes).
 Each chunk is stored as a separate row in the <acronym>TOAST</acronym> table
 belonging to the owning table.  Every
diff --git a/contrib/amcheck/verify_heapam.c b/contrib/amcheck/verify_heapam.c
index 20ff58aa7825..bbaaec89f8ae 100644
--- a/contrib/amcheck/verify_heapam.c
+++ b/contrib/amcheck/verify_heapam.c
@@ -75,7 +75,7 @@ typedef enum SkipPages
  */
 typedef struct ToastedAttribute
 {
-       varatt_external toast_pointer;
+       varatt_external_oid toast_pointer;
        BlockNumber blkno;                      /* block in main table */
        OffsetNumber offnum;            /* offset in main table */
        AttrNumber      attnum;                 /* attribute in main table */
@@ -1558,11 +1558,15 @@ check_toast_tuple(HeapTuple toasttup, HeapCheckContext 
*ctx,
                                  uint32 extsize)
 {
        int32           chunk_seq;
-       int32           last_chunk_seq = (extsize - 1) / TOAST_MAX_CHUNK_SIZE;
+       int32           last_chunk_seq;
        Pointer         chunk;
        bool            isnull;
        int32           chunksize;
        int32           expected_size;
+       int32           max_chunk_size;
+
+       max_chunk_size = TOAST_OID_MAX_CHUNK_SIZE;
+       last_chunk_seq = (extsize - 1) / max_chunk_size;
 
        /* Sanity-check the sequence number. */
        chunk_seq = DatumGetInt32(fastgetattr(toasttup, 2,
@@ -1628,8 +1632,8 @@ check_toast_tuple(HeapTuple toasttup, HeapCheckContext 
*ctx,
                return;
        }
 
-       expected_size = chunk_seq < last_chunk_seq ? TOAST_MAX_CHUNK_SIZE
-               : extsize - (last_chunk_seq * TOAST_MAX_CHUNK_SIZE);
+       expected_size = chunk_seq < last_chunk_seq ? max_chunk_size
+               : extsize - (last_chunk_seq * max_chunk_size);
 
        if (chunksize != expected_size)
                report_toast_corruption(ctx, ta,
@@ -1666,7 +1670,7 @@ check_tuple_attribute(HeapCheckContext *ctx)
        char       *tp;                         /* pointer to the tuple data */
        uint16          infomask;
        CompactAttribute *thisatt;
-       varatt_external toast_pointer;
+       varatt_external_oid toast_pointer;
 
        infomask = ctx->tuphdr->t_infomask;
        thisatt = TupleDescCompactAttr(RelationGetDescr(ctx->rel), ctx->attnum);
@@ -1725,7 +1729,7 @@ check_tuple_attribute(HeapCheckContext *ctx)
        {
                uint8           va_tag = VARTAG_EXTERNAL(tp + ctx->offset);
 
-               if (va_tag != VARTAG_ONDISK)
+               if (va_tag != VARTAG_ONDISK_OID)
                {
                        report_corruption(ctx,
                                                          psprintf("toasted 
attribute has unexpected TOAST tag %u",
@@ -1782,7 +1786,7 @@ check_tuple_attribute(HeapCheckContext *ctx)
                                                                   
toast_pointer.va_rawsize,
                                                                   
VARLENA_SIZE_LIMIT));
 
-       if (VARATT_EXTERNAL_IS_COMPRESSED(toast_pointer))
+       if (VARATT_EXTERNAL_OID_IS_COMPRESSED(toast_pointer))
        {
                ToastCompressionId cmid;
                bool            valid = false;
@@ -1868,9 +1872,10 @@ check_toasted_attribute(HeapCheckContext *ctx, 
ToastedAttribute *ta)
        uint32          extsize;
        int32           expected_chunk_seq = 0;
        int32           last_chunk_seq;
+       int32           max_chunk_size = TOAST_OID_MAX_CHUNK_SIZE;
 
-       extsize = VARATT_EXTERNAL_GET_EXTSIZE(ta->toast_pointer);
-       last_chunk_seq = (extsize - 1) / TOAST_MAX_CHUNK_SIZE;
+       extsize = VARATT_EXTERNAL_OID_GET_EXTSIZE(ta->toast_pointer);
+       last_chunk_seq = (extsize - 1) / max_chunk_size;
 
        /*
         * Setup a scan key to find chunks in toast table with matching 
va_valueid
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index c546b3d6375d..04aa7bd202ce 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -4436,7 +4436,7 @@ va_list
 vacuumingOptions
 validate_string_relopt
 varatt_expanded
-varatt_external
+varatt_external_oid
 varatt_indirect
 varattrib_1b
 varattrib_1b_e
-- 
2.55.0

Attachment: signature.asc
Description: PGP signature

Reply via email to