From 17b2aecb080d74ec41519214bb44fc6214065cc8 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Wed, 13 Aug 2025 18:28:10 +0900 Subject: [PATCH v1 03/11] Rename varatt_external to varatt_external_oid This impacts a few more things, related to this structure: - 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 commit that aims at adding support for multiple types of external on-disk TOAST pointers, where the OID type is only one subset of them. --- 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 | 2 +- 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/func/func-info.sgml | 2 +- doc/src/sgml/storage.sgml | 2 +- contrib/amcheck/verify_heapam.c | 14 ++++---- 15 files changed, 72 insertions(+), 68 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 ff234c652230..aaae6e0fef69 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 11e3d39d1bd4..ca5ed8dfabca 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 d1f9c25e93cd..81154c17376c 100644 --- a/src/backend/access/heap/heaptoast.c +++ b/src/backend/access/heap/heaptoast.c @@ -647,7 +647,7 @@ heap_fetch_toast_slice(Relation toastrel, Oid8 valueid, int32 attrsize, &toastidxs, &num_indexes); - max_chunk_size = TOAST_MAX_CHUNK_SIZE; + max_chunk_size = TOAST_OID_MAX_CHUNK_SIZE; totalchunks = ((attrsize - 1) / max_chunk_size) + 1; startchunk = sliceoffset / max_chunk_size; 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 f0434da40c94..98c83be84ec9 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -4316,7 +4316,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 */ @@ -4569,15 +4569,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 252746022bf8..a7b524906995 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -5134,7 +5134,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; @@ -5204,10 +5204,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 c0ff51bd2fc1..ae406f458a99 100644 --- a/src/backend/utils/adt/varlena.c +++ b/src/backend/utils/adt/varlena.c @@ -4258,7 +4258,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 f8d25afed9de..571805cbd54c 100644 --- a/src/bin/pg_resetwal/pg_resetwal.c +++ b/src/bin/pg_resetwal/pg_resetwal.c @@ -733,7 +733,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/func/func-info.sgml b/doc/src/sgml/func/func-info.sgml index 00f64f50ceb8..3c6f2edd5e50 100644 --- a/doc/src/sgml/func/func-info.sgml +++ b/doc/src/sgml/func/func-info.sgml @@ -3596,7 +3596,7 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} - max_toast_chunk_size + max_toast_oid_chunk_size integer diff --git a/doc/src/sgml/storage.sgml b/doc/src/sgml/storage.sgml index 6b6377503bf6..6b1e00bfd38e 100644 --- a/doc/src/sgml/storage.sgml +++ b/doc/src/sgml/storage.sgml @@ -417,7 +417,7 @@ described in more detail below. Out-of-line values are divided (after compression if used) into chunks of at -most TOAST_MAX_CHUNK_SIZE bytes (by default this value is chosen +most TOAST_OID_MAX_CHUNK_SIZE 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 TOAST table belonging to the owning table. Every diff --git a/contrib/amcheck/verify_heapam.c b/contrib/amcheck/verify_heapam.c index 22bba6161de4..119a54a9404c 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 */ @@ -1568,7 +1568,7 @@ check_toast_tuple(HeapTuple toasttup, HeapCheckContext *ctx, toast_valueid = ta->toast_pointer.va_valueid; - max_chunk_size = TOAST_MAX_CHUNK_SIZE; + max_chunk_size = TOAST_OID_MAX_CHUNK_SIZE; last_chunk_seq = (extsize - 1) / max_chunk_size; /* Sanity-check the sequence number. */ @@ -1674,7 +1674,7 @@ check_tuple_attribute(HeapCheckContext *ctx) uint16 infomask; Oid8 toast_pointer_valueid; CompactAttribute *thisatt; - varatt_external toast_pointer; + varatt_external_oid toast_pointer; infomask = ctx->tuphdr->t_infomask; thisatt = TupleDescCompactAttr(RelationGetDescr(ctx->rel), ctx->attnum); @@ -1733,7 +1733,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", @@ -1791,7 +1791,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; @@ -1878,9 +1878,9 @@ check_toasted_attribute(HeapCheckContext *ctx, ToastedAttribute *ta) int32 expected_chunk_seq = 0; int32 last_chunk_seq; Oid8 toast_valueid; - int32 max_chunk_size = TOAST_MAX_CHUNK_SIZE; + int32 max_chunk_size = TOAST_OID_MAX_CHUNK_SIZE; - extsize = VARATT_EXTERNAL_GET_EXTSIZE(ta->toast_pointer); + extsize = VARATT_EXTERNAL_OID_GET_EXTSIZE(ta->toast_pointer); last_chunk_seq = (extsize - 1) / max_chunk_size; /* -- 2.54.0