On Tue, 11 Nov 2025 at 09:22, Álvaro Herrera <[email protected]> wrote: > > > There are other issues in the 0001 patch though, apart from the weird > typo you noticed. One is that macro definitions such as > NUM_TUPLESORTMETHODS should move to the new file together with the enum > which gives it life, together with the comment that explains it; also, > some of the structs that are being moved have comments that make sense > in their current location (because they are surrounded by related > structs), but not so much in the new location. For instance, I would > say this needs to be different: >
Thanks guys for the feedback. I rebased from master as well and applied the suggestions. Regarding changing the comments, I reckon we can do it in the next iteration if you still consider it worth it. But the code looks good to me, I hope it does for you too: https://cirrus-ci.com/build/6530088079982592 > +/* ---------------- > + * Values displayed by EXPLAIN ANALYZE > + * ---------------- > + */ > +typedef struct HashInstrumentation > > This should say something like "Instrumentation for Hash nodes" or > something like that. Less critically, the comment styling (those lines > of dashes, vertical spacing, and so on) should be made consistent across > the whole instrument_node.h file instead of using whatever was in the > original file, which is an eclectic mix of various different styles. > > Another thing I'd do here is make 0001 as minimal as possible. I see > that some files get a new #include "utils/typcache.h" line (or amapi.h > or genam.h), for instance, but that change makes no sense in that patch. > These additions should be in the 0002 patch. The only new #include line > in the 0001 patch should be instrument_node.h itself, because we're > explicitly not removing any other #include line anywhere. > > -- > Álvaro Herrera 48°01'N 7°57'E — https://www.EnterpriseDB.com/ > "El que vive para el futuro es un iluso, y el que vive para el pasado, > un imbécil" (Luis Adler, "Los tripulantes de la noche") -- Mario Gonzalez EDB: https://www.enterprisedb.com
From 1059e3aa7a3dee3ebdbb87f44183d899be7e8c09 Mon Sep 17 00:00:00 2001 From: Mario Gonzalez <[email protected]> Date: Wed, 5 Nov 2025 17:19:08 -0300 Subject: [PATCH v2 3/4] Remove storage/buf.h from access/relscan.h --- src/include/access/relscan.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/include/access/relscan.h b/src/include/access/relscan.h index 78989a959d4..bfd67e8026f 100644 --- a/src/include/access/relscan.h +++ b/src/include/access/relscan.h @@ -18,7 +18,6 @@ #include "access/itup.h" #include "nodes/tidbitmap.h" #include "port/atomics.h" -#include "storage/buf.h" #include "storage/relfilelocator.h" #include "storage/spin.h" #include "utils/relcache.h" -- 2.39.5
From 3a3653e00e5a05b807ce5abf280ec4b7d7b4199f Mon Sep 17 00:00:00 2001 From: Mario Gonzalez <[email protected]> Date: Mon, 3 Nov 2025 19:36:23 -0300 Subject: [PATCH v2 4/4] Remove unused headers from execReplication.c Signed-off-by: Mario Gonzalez <[email protected]> --- src/backend/executor/execReplication.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/backend/executor/execReplication.c b/src/backend/executor/execReplication.c index 0431adfc82c..8b3ef13efe7 100644 --- a/src/backend/executor/execReplication.c +++ b/src/backend/executor/execReplication.c @@ -17,13 +17,11 @@ #include "access/amapi.h" #include "access/commit_ts.h" #include "access/genam.h" -#include "access/gist.h" #include "access/relscan.h" #include "access/tableam.h" #include "access/transam.h" #include "access/xact.h" #include "access/heapam.h" -#include "catalog/pg_am_d.h" #include "commands/trigger.h" #include "executor/executor.h" #include "executor/nodeModifyTable.h" -- 2.39.5
From 187f83461e74183cc836090e8960d054a0c56e46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Herrera?= <[email protected]> Date: Sun, 5 Oct 2025 18:54:56 +0200 Subject: [PATCH v2 1/4] Move instrumentation related structures into instrument_node.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We have structs and enums that are related to instrumentation and they were mixed in different parts of the code. This commit defines them in a separate header to centralise all of them. Co-authored-by: Álvaro Herrera <[email protected]> Co-authored-by: Mario Gonzalez <[email protected]> Discussion: https://www.postgresql.org/message-id/202510051642.wwmn4mj77wch%40alvherre.pgsql --- contrib/bloom/blscan.c | 1 + src/backend/access/gin/ginscan.c | 1 + src/backend/access/gist/gistget.c | 1 + src/backend/access/hash/hashsearch.c | 1 + src/backend/access/nbtree/nbtsearch.c | 1 + src/backend/access/spgist/spgscan.c | 1 + src/include/access/genam.h | 23 +-- src/include/executor/instrument_node.h | 213 +++++++++++++++++++++++++ src/include/nodes/execnodes.h | 140 ---------------- src/include/utils/tuplesort.h | 22 +-- 10 files changed, 221 insertions(+), 183 deletions(-) create mode 100644 src/include/executor/instrument_node.h diff --git a/contrib/bloom/blscan.c b/contrib/bloom/blscan.c index 0d71edbe91c..a5c81042c00 100644 --- a/contrib/bloom/blscan.c +++ b/contrib/bloom/blscan.c @@ -14,6 +14,7 @@ #include "access/relscan.h" #include "bloom.h" +#include "executor/instrument_node.h" #include "miscadmin.h" #include "pgstat.h" #include "storage/bufmgr.h" diff --git a/src/backend/access/gin/ginscan.c b/src/backend/access/gin/ginscan.c index 2ca635909f9..e6668752d71 100644 --- a/src/backend/access/gin/ginscan.c +++ b/src/backend/access/gin/ginscan.c @@ -16,6 +16,7 @@ #include "access/gin_private.h" #include "access/relscan.h" +#include "executor/instrument_node.h" #include "pgstat.h" #include "utils/memutils.h" #include "utils/rel.h" diff --git a/src/backend/access/gist/gistget.c b/src/backend/access/gist/gistget.c index 9ba45acfff3..771768d31d6 100644 --- a/src/backend/access/gist/gistget.c +++ b/src/backend/access/gist/gistget.c @@ -17,6 +17,7 @@ #include "access/genam.h" #include "access/gist_private.h" #include "access/relscan.h" +#include "executor/instrument_node.h" #include "lib/pairingheap.h" #include "miscadmin.h" #include "pgstat.h" diff --git a/src/backend/access/hash/hashsearch.c b/src/backend/access/hash/hashsearch.c index 92c15a65be2..00395b01f60 100644 --- a/src/backend/access/hash/hashsearch.c +++ b/src/backend/access/hash/hashsearch.c @@ -17,6 +17,7 @@ #include "access/hash.h" #include "access/relscan.h" #include "miscadmin.h" +#include "executor/instrument_node.h" #include "pgstat.h" #include "storage/predicate.h" #include "utils/rel.h" diff --git a/src/backend/access/nbtree/nbtsearch.c b/src/backend/access/nbtree/nbtsearch.c index aec71093661..ef8546b76cb 100644 --- a/src/backend/access/nbtree/nbtsearch.c +++ b/src/backend/access/nbtree/nbtsearch.c @@ -18,6 +18,7 @@ #include "access/nbtree.h" #include "access/relscan.h" #include "access/xact.h" +#include "executor/instrument_node.h" #include "miscadmin.h" #include "pgstat.h" #include "storage/predicate.h" diff --git a/src/backend/access/spgist/spgscan.c b/src/backend/access/spgist/spgscan.c index 946772f3957..fb583507718 100644 --- a/src/backend/access/spgist/spgscan.c +++ b/src/backend/access/spgist/spgscan.c @@ -18,6 +18,7 @@ #include "access/genam.h" #include "access/relscan.h" #include "access/spgist_private.h" +#include "executor/instrument_node.h" #include "miscadmin.h" #include "pgstat.h" #include "storage/bufmgr.h" diff --git a/src/include/access/genam.h b/src/include/access/genam.h index 9200a22bd9f..87d744eff07 100644 --- a/src/include/access/genam.h +++ b/src/include/access/genam.h @@ -17,6 +17,7 @@ #include "access/htup.h" #include "access/sdir.h" #include "access/skey.h" +#include "executor/instrument_node.h" #include "nodes/tidbitmap.h" #include "storage/buf.h" #include "storage/lockdefs.h" @@ -29,28 +30,6 @@ typedef struct TupleTableSlot TupleTableSlot; /* or relcache.h */ typedef struct RelationData *Relation; - -/* - * Struct for statistics maintained by amgettuple and amgetbitmap - * - * Note: IndexScanInstrumentation can't contain any pointers, since it is - * copied into a SharedIndexScanInstrumentation during parallel scans - */ -typedef struct IndexScanInstrumentation -{ - /* Index search count (incremented with pgstat_count_index_scan call) */ - uint64 nsearches; -} IndexScanInstrumentation; - -/* - * Struct for every worker's IndexScanInstrumentation, stored in shared memory - */ -typedef struct SharedIndexScanInstrumentation -{ - int num_workers; - IndexScanInstrumentation winstrument[FLEXIBLE_ARRAY_MEMBER]; -} SharedIndexScanInstrumentation; - /* * Struct for statistics returned by ambuild */ diff --git a/src/include/executor/instrument_node.h b/src/include/executor/instrument_node.h new file mode 100644 index 00000000000..75520008c36 --- /dev/null +++ b/src/include/executor/instrument_node.h @@ -0,0 +1,213 @@ +/*------------------------------------------------------------------------- + * + * instrument_node.h + * Definitions for node-specific instrumentation + * + * + * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/include/executor/instrument_node.h + * + *------------------------------------------------------------------------- + */ +#ifndef INSTRUMENT_NODE_H +#define INSTRUMENT_NODE_H + + + +/* --------------------- + * per-worker aggregate information + * --------------------- + */ +typedef struct AggregateInstrumentation +{ + Size hash_mem_peak; /* peak hash table memory usage */ + uint64 hash_disk_used; /*kB of disk space used */ + int hash_batches_used; /* batches used during entire execution */ +} AggregateInstrumentation; + +/* ---------------- + * Shared memory container for per-worker aggregate information + * ---------------- + */ +typedef struct SharedAggInfo +{ + int num_workers; + AggregateInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER]; +} SharedAggInfo; +/* + * Struct for statistics maintained by amgettuple and amgetbitmap + * + * Note: IndexScanInstrumentation can't contain any pointers, since it is + * copied into a SharedIndexScanInstrumentation during parallel scans + */ +typedef struct IndexScanInstrumentation +{ + /* Index search count (incremented with pgstat_count_index_scan call) */ + uint64 nsearches; +} IndexScanInstrumentation; + +/* + * Struct for every worker's IndexScanInstrumentation, stored in shared memory + */ +typedef struct SharedIndexScanInstrumentation +{ + int num_workers; + IndexScanInstrumentation winstrument[FLEXIBLE_ARRAY_MEMBER]; +} SharedIndexScanInstrumentation; + +/* + * BitmapHeapScanInstrumentation information + * + * exact_pages total number of exact pages retrieved + * lossy_pages total number of lossy pages retrieved + */ +typedef struct BitmapHeapScanInstrumentation +{ + uint64 exact_pages; + uint64 lossy_pages; +} BitmapHeapScanInstrumentation; + +/* + * Instrumentation data for a parallel bitmap heap scan. + * + * A shared memory struct that each parallel worker copies its + * BitmapHeapScanInstrumentation information into at executor shutdown to + * allow the leader to display the information in EXPLAIN ANALYZE. + */ +typedef struct SharedBitmapHeapInstrumentation +{ + int num_workers; + BitmapHeapScanInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER]; +} SharedBitmapHeapInstrumentation; + + +typedef struct MemoizeInstrumentation +{ + uint64 cache_hits; /* number of rescans where we've found the + * scan parameters values to be cached */ + uint64 cache_misses; /* number of rescans where we've not found the + * scan parameters values to be cached */ + uint64 cache_evictions; /* number of cache entries removed due to + * the need to free memory */ + uint64 cache_overflows; /* number of times we've had to bypass the + * cache when filling it due to not being + * able to free enough space to store the + * current scan's tuples */ + uint64 mem_peak; /* peak memory usage in bytes */ + +} MemoizeInstrumentation; + +/* ---------------- + * Shared memory container for per-worker memoize information + * ---------------- + */ +typedef struct SharedMemoizeInfo +{ + int num_workers; + MemoizeInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER]; +} SharedMemoizeInfo; + + +/* + * Data structures for reporting sort statistics. Note that + * TuplesortInstrumentation can't contain any pointers because we + * sometimes put it in shared memory. + * + * The parallel-sort infrastructure relies on having a zero TuplesortMethod + * to indicate that a worker never did anything, so we assign zero to + * SORT_TYPE_STILL_IN_PROGRESS. The other values of this enum can be + * OR'ed together to represent a situation where different workers used + * different methods, so we need a separate bit for each one. Keep the + * NUM_TUPLESORTMETHODS constant in sync with the number of bits! + */ + +#define NUM_TUPLESORTMETHODS 4 + +typedef enum +{ + SORT_SPACE_TYPE_DISK, + SORT_SPACE_TYPE_MEMORY, +} TuplesortSpaceType; + +typedef enum +{ + SORT_TYPE_STILL_IN_PROGRESS = 0, + SORT_TYPE_TOP_N_HEAPSORT = 1 << 0, + SORT_TYPE_QUICKSORT = 1 << 1, + SORT_TYPE_EXTERNAL_SORT = 1 << 2, + SORT_TYPE_EXTERNAL_MERGE = 1 << 3 +} TuplesortMethod; + +typedef struct TuplesortInstrumentation +{ + TuplesortMethod sortMethod; /* sort algorithm used */ + TuplesortSpaceType spaceType; /* type of space spaceUsed represents */ + int64 spaceUsed; /* space consumption, in kB */ +} TuplesortInstrumentation; + +/* ---------------- + * Shared memory container for per-worker sort information + * ---------------- + */ +typedef struct SharedSortInfo +{ + int num_workers; + TuplesortInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER]; +} SharedSortInfo; + +/* ---------------- + * Values displayed by EXPLAIN ANALYZE + * ---------------- + */ +typedef struct HashInstrumentation +{ + int nbuckets; /* number of buckets at end of execution */ + int nbuckets_original; /* planned number of buckets */ + int nbatch; /* number of batches at end of execution */ + int nbatch_original; /* planned number of batches */ + Size space_peak; /* peak memory usage in bytes */ +} HashInstrumentation; + +/* ---------------- + * Shared memory container for per-worker hash information + * ---------------- + */ +typedef struct SharedHashInfo +{ + int num_workers; + HashInstrumentation hinstrument[FLEXIBLE_ARRAY_MEMBER]; +} SharedHashInfo; + +/* ---------------- + * Instrumentation information for IncrementalSort + * ---------------- + */ +typedef struct IncrementalSortGroupInfo +{ + int64 groupCount; + int64 maxDiskSpaceUsed; + int64 totalDiskSpaceUsed; + int64 maxMemorySpaceUsed; + int64 totalMemorySpaceUsed; + bits32 sortMethods; /* bitmask of TuplesortMethod */ +} IncrementalSortGroupInfo; + +typedef struct IncrementalSortInfo +{ + IncrementalSortGroupInfo fullsortGroupInfo; + IncrementalSortGroupInfo prefixsortGroupInfo; +} IncrementalSortInfo; + +/* ---------------- + * Shared memory container for per-worker incremental sort information + * ---------------- + */ +typedef struct SharedIncrementalSortInfo +{ + int num_workers; + IncrementalSortInfo sinfo[FLEXIBLE_ARRAY_MEMBER]; +} SharedIncrementalSortInfo; + +#endif /* INSTRUMENT_NODE_H */ diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index 3968429f991..f421a52c16d 100644 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -1816,19 +1816,6 @@ typedef struct BitmapIndexScanState SharedIndexScanInstrumentation *biss_SharedInfo; } BitmapIndexScanState; -/* ---------------- - * BitmapHeapScanInstrumentation information - * - * exact_pages total number of exact pages retrieved - * lossy_pages total number of lossy pages retrieved - * ---------------- - */ -typedef struct BitmapHeapScanInstrumentation -{ - uint64 exact_pages; - uint64 lossy_pages; -} BitmapHeapScanInstrumentation; - /* ---------------- * SharedBitmapState information * @@ -1865,20 +1852,6 @@ typedef struct ParallelBitmapHeapState ConditionVariable cv; } ParallelBitmapHeapState; -/* ---------------- - * Instrumentation data for a parallel bitmap heap scan. - * - * A shared memory struct that each parallel worker copies its - * BitmapHeapScanInstrumentation information into at executor shutdown to - * allow the leader to display the information in EXPLAIN ANALYZE. - * ---------------- - */ -typedef struct SharedBitmapHeapInstrumentation -{ - int num_workers; - BitmapHeapScanInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER]; -} SharedBitmapHeapInstrumentation; - /* ---------------- * BitmapHeapScanState information * @@ -2305,31 +2278,6 @@ struct MemoizeEntry; struct MemoizeTuple; struct MemoizeKey; -typedef struct MemoizeInstrumentation -{ - uint64 cache_hits; /* number of rescans where we've found the - * scan parameter values to be cached */ - uint64 cache_misses; /* number of rescans where we've not found the - * scan parameter values to be cached. */ - uint64 cache_evictions; /* number of cache entries removed due to - * the need to free memory */ - uint64 cache_overflows; /* number of times we've had to bypass the - * cache when filling it due to not being - * able to free enough space to store the - * current scan's tuples. */ - uint64 mem_peak; /* peak memory usage in bytes */ -} MemoizeInstrumentation; - -/* ---------------- - * Shared memory container for per-worker memoize information - * ---------------- - */ -typedef struct SharedMemoizeInfo -{ - int num_workers; - MemoizeInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER]; -} SharedMemoizeInfo; - /* ---------------- * MemoizeState information * @@ -2385,16 +2333,6 @@ typedef struct PresortedKeyData OffsetNumber attno; /* attribute number in tuple */ } PresortedKeyData; -/* ---------------- - * Shared memory container for per-worker sort information - * ---------------- - */ -typedef struct SharedSortInfo -{ - int num_workers; - TuplesortInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER]; -} SharedSortInfo; - /* ---------------- * SortState information * ---------------- @@ -2414,40 +2352,6 @@ typedef struct SortState SharedSortInfo *shared_info; /* one entry per worker */ } SortState; -/* ---------------- - * Instrumentation information for IncrementalSort - * ---------------- - */ -typedef struct IncrementalSortGroupInfo -{ - int64 groupCount; - int64 maxDiskSpaceUsed; - int64 totalDiskSpaceUsed; - int64 maxMemorySpaceUsed; - int64 totalMemorySpaceUsed; - bits32 sortMethods; /* bitmask of TuplesortMethod */ -} IncrementalSortGroupInfo; - -typedef struct IncrementalSortInfo -{ - IncrementalSortGroupInfo fullsortGroupInfo; - IncrementalSortGroupInfo prefixsortGroupInfo; -} IncrementalSortInfo; - -/* ---------------- - * Shared memory container for per-worker incremental sort information - * ---------------- - */ -typedef struct SharedIncrementalSortInfo -{ - int num_workers; - IncrementalSortInfo sinfo[FLEXIBLE_ARRAY_MEMBER]; -} SharedIncrementalSortInfo; - -/* ---------------- - * IncrementalSortState information - * ---------------- - */ typedef enum { INCSORT_LOADFULLSORT, @@ -2490,27 +2394,6 @@ typedef struct GroupState bool grp_done; /* indicates completion of Group scan */ } GroupState; -/* --------------------- - * per-worker aggregate information - * --------------------- - */ -typedef struct AggregateInstrumentation -{ - Size hash_mem_peak; /* peak hash table memory usage */ - uint64 hash_disk_used; /* kB of disk space used */ - int hash_batches_used; /* batches used during entire execution */ -} AggregateInstrumentation; - -/* ---------------- - * Shared memory container for per-worker aggregate information - * ---------------- - */ -typedef struct SharedAggInfo -{ - int num_workers; - AggregateInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER]; -} SharedAggInfo; - /* --------------------- * AggState information * @@ -2787,29 +2670,6 @@ typedef struct GatherMergeState struct binaryheap *gm_heap; /* binary heap of slot indices */ } GatherMergeState; -/* ---------------- - * Values displayed by EXPLAIN ANALYZE - * ---------------- - */ -typedef struct HashInstrumentation -{ - int nbuckets; /* number of buckets at end of execution */ - int nbuckets_original; /* planned number of buckets */ - int nbatch; /* number of batches at end of execution */ - int nbatch_original; /* planned number of batches */ - Size space_peak; /* peak memory usage in bytes */ -} HashInstrumentation; - -/* ---------------- - * Shared memory container for per-worker hash information - * ---------------- - */ -typedef struct SharedHashInfo -{ - int num_workers; - HashInstrumentation hinstrument[FLEXIBLE_ARRAY_MEMBER]; -} SharedHashInfo; - /* ---------------- * HashState information * ---------------- diff --git a/src/include/utils/tuplesort.h b/src/include/utils/tuplesort.h index 63a7cc13a31..7261345d217 100644 --- a/src/include/utils/tuplesort.h +++ b/src/include/utils/tuplesort.h @@ -24,6 +24,7 @@ #include "access/brin_tuple.h" #include "access/gin_tuple.h" #include "access/itup.h" +#include "executor/instrument_node.h" #include "executor/tuptable.h" #include "storage/dsm.h" #include "utils/logtape.h" @@ -73,23 +74,9 @@ typedef struct SortCoordinateData *SortCoordinate; * different methods, so we need a separate bit for each one. Keep the * NUM_TUPLESORTMETHODS constant in sync with the number of bits! */ -typedef enum -{ - SORT_TYPE_STILL_IN_PROGRESS = 0, - SORT_TYPE_TOP_N_HEAPSORT = 1 << 0, - SORT_TYPE_QUICKSORT = 1 << 1, - SORT_TYPE_EXTERNAL_SORT = 1 << 2, - SORT_TYPE_EXTERNAL_MERGE = 1 << 3, -} TuplesortMethod; #define NUM_TUPLESORTMETHODS 4 -typedef enum -{ - SORT_SPACE_TYPE_DISK, - SORT_SPACE_TYPE_MEMORY, -} TuplesortSpaceType; - /* Bitwise option flags for tuple sorts */ #define TUPLESORT_NONE 0 @@ -108,13 +95,6 @@ typedef enum */ #define TupleSortUseBumpTupleCxt(opt) (((opt) & TUPLESORT_ALLOWBOUNDED) == 0) -typedef struct TuplesortInstrumentation -{ - TuplesortMethod sortMethod; /* sort algorithm used */ - TuplesortSpaceType spaceType; /* type of space spaceUsed represents */ - int64 spaceUsed; /* space consumption, in kB */ -} TuplesortInstrumentation; - /* * The objects we actually sort are SortTuple structs. These contain * a pointer to the tuple proper (might be a MinimalTuple or IndexTuple), -- 2.39.5
From 3a21f9f3099c3979abf379bd53b367d8237214cf Mon Sep 17 00:00:00 2001 From: Mario Gonzalez <[email protected]> Date: Thu, 6 Nov 2025 17:50:36 -0300 Subject: [PATCH v2 2/4] Remove brin/gin_tuple.h from tuplesort.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Because execnodes.h depends on struct definitions that were in genam.h, which it no longer gets because of the aforementioned removal. Author: Álvaro Herrera <[email protected]> co-author: Mario Gonzalez <[email protected]> --- contrib/pageinspect/gistfuncs.c | 1 + src/backend/access/gin/gininsert.c | 1 + src/backend/catalog/pg_attrdef.c | 1 + src/backend/catalog/pg_largeobject.c | 1 + src/backend/executor/execReplication.c | 1 + src/backend/parser/parse_expr.c | 1 + src/backend/replication/logical/relation.c | 1 + src/backend/replication/logical/sequencesync.c | 1 + src/backend/statistics/attribute_stats.c | 1 + src/include/nodes/execnodes.h | 1 + src/include/utils/tuplesort.h | 5 +++-- 11 files changed, 13 insertions(+), 2 deletions(-) diff --git a/contrib/pageinspect/gistfuncs.c b/contrib/pageinspect/gistfuncs.c index 414513c395b..d738d6519f6 100644 --- a/contrib/pageinspect/gistfuncs.c +++ b/contrib/pageinspect/gistfuncs.c @@ -9,6 +9,7 @@ */ #include "postgres.h" +#include "access/genam.h" #include "access/gist.h" #include "access/htup.h" #include "access/htup_details.h" diff --git a/src/backend/access/gin/gininsert.c b/src/backend/access/gin/gininsert.c index df30dcc0228..e71a08d541f 100644 --- a/src/backend/access/gin/gininsert.c +++ b/src/backend/access/gin/gininsert.c @@ -33,6 +33,7 @@ #include "utils/memutils.h" #include "utils/rel.h" #include "utils/builtins.h" +#include "utils/typcache.h" /* Magic numbers for parallel state sharing */ diff --git a/src/backend/catalog/pg_attrdef.c b/src/backend/catalog/pg_attrdef.c index 29f5691bee9..e8bdb52cb00 100644 --- a/src/backend/catalog/pg_attrdef.c +++ b/src/backend/catalog/pg_attrdef.c @@ -14,6 +14,7 @@ */ #include "postgres.h" +#include "access/genam.h" #include "access/htup_details.h" #include "access/relation.h" #include "access/table.h" diff --git a/src/backend/catalog/pg_largeobject.c b/src/backend/catalog/pg_largeobject.c index 33e8fa96a65..ada4c3685e0 100644 --- a/src/backend/catalog/pg_largeobject.c +++ b/src/backend/catalog/pg_largeobject.c @@ -14,6 +14,7 @@ */ #include "postgres.h" +#include "access/genam.h" #include "access/htup_details.h" #include "access/table.h" #include "catalog/catalog.h" diff --git a/src/backend/executor/execReplication.c b/src/backend/executor/execReplication.c index 860f79f9cc1..0431adfc82c 100644 --- a/src/backend/executor/execReplication.c +++ b/src/backend/executor/execReplication.c @@ -14,6 +14,7 @@ #include "postgres.h" +#include "access/amapi.h" #include "access/commit_ts.h" #include "access/genam.h" #include "access/gist.h" diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c index 6b8fa15fca3..e374422d24d 100644 --- a/src/backend/parser/parse_expr.c +++ b/src/backend/parser/parse_expr.c @@ -38,6 +38,7 @@ #include "utils/fmgroids.h" #include "utils/lsyscache.h" #include "utils/timestamp.h" +#include "utils/typcache.h" #include "utils/xml.h" /* GUC parameters */ diff --git a/src/backend/replication/logical/relation.c b/src/backend/replication/logical/relation.c index 2c8485b881f..c67f7e49a65 100644 --- a/src/backend/replication/logical/relation.c +++ b/src/backend/replication/logical/relation.c @@ -29,6 +29,7 @@ #include "utils/inval.h" #include "utils/lsyscache.h" #include "utils/syscache.h" +#include "utils/typcache.h" static MemoryContext LogicalRepRelMapContext = NULL; diff --git a/src/backend/replication/logical/sequencesync.c b/src/backend/replication/logical/sequencesync.c index 019e5ec6a7d..0eeffcbcf45 100644 --- a/src/backend/replication/logical/sequencesync.c +++ b/src/backend/replication/logical/sequencesync.c @@ -52,6 +52,7 @@ #include "postgres.h" #include "access/table.h" +#include "access/genam.h" #include "catalog/pg_sequence.h" #include "catalog/pg_subscription_rel.h" #include "commands/sequence.h" diff --git a/src/backend/statistics/attribute_stats.c b/src/backend/statistics/attribute_stats.c index ef4d768feab..9ccc04da3ef 100644 --- a/src/backend/statistics/attribute_stats.c +++ b/src/backend/statistics/attribute_stats.c @@ -31,6 +31,7 @@ #include "utils/fmgroids.h" #include "utils/lsyscache.h" #include "utils/syscache.h" +#include "utils/typcache.h" #define DEFAULT_NULL_FRAC Float4GetDatum(0.0) #define DEFAULT_AVG_WIDTH Int32GetDatum(0) /* unknown */ diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index f421a52c16d..425d09d2027 100644 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -29,6 +29,7 @@ #ifndef EXECNODES_H #define EXECNODES_H +#include "access/skey.h" #include "access/tupconvert.h" #include "executor/instrument.h" #include "fmgr.h" diff --git a/src/include/utils/tuplesort.h b/src/include/utils/tuplesort.h index 7261345d217..ea008e3066f 100644 --- a/src/include/utils/tuplesort.h +++ b/src/include/utils/tuplesort.h @@ -21,8 +21,6 @@ #ifndef TUPLESORT_H #define TUPLESORT_H -#include "access/brin_tuple.h" -#include "access/gin_tuple.h" #include "access/itup.h" #include "executor/instrument_node.h" #include "executor/tuptable.h" @@ -31,6 +29,9 @@ #include "utils/relcache.h" #include "utils/sortsupport.h" +/* We don't want this file to depend on AM-specific header files */ +typedef struct BrinTuple BrinTuple; +typedef struct GinTuple GinTuple; /* * Tuplesortstate and Sharedsort are opaque types whose details are not -- 2.39.5
