Hello, On 2026-Apr-02, Andres Freund wrote:
> On 2026-04-02 20:24:29 +0200, Álvaro Herrera wrote: > > Looking at what else includes bufmgr.h, I think the minimum it can > > reduced to is compiling 157 files when you change bufmgr.h, per the > > patches attached here. Most of them are direct inclusions, so reducing > > further is tough. The only one we could blame is xlogutils.h, but it > > needs the ReadBufferMode enum, so in order to do better, we'd have to > > split bufmgr.h in two. > > I think you may have forgotten to attach the changes? Hm, so I did. Here they are. -- Álvaro Herrera 48°01'N 7°57'E — https://www.EnterpriseDB.com/ "Las mujeres son como hondas: mientras más resistencia tienen, más lejos puedes llegar con ellas" (Jonas Nightingale, Leap of Faith)
>From 00786681f1634242cbf033618397aaf3dc729e0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Herrera?= <[email protected]> Date: Thu, 2 Apr 2026 20:01:36 +0200 Subject: [PATCH 1/5] don't include bufmgr.h in nbtree.h --- contrib/amcheck/verify_nbtree.c | 1 + contrib/pageinspect/btreefuncs.c | 1 + src/backend/access/nbtree/nbtdedup.c | 1 + src/backend/access/nbtree/nbtinsert.c | 1 + src/backend/access/nbtree/nbtpage.c | 1 + src/backend/access/nbtree/nbtreadpage.c | 1 + src/backend/access/nbtree/nbtsearch.c | 1 + src/backend/access/nbtree/nbtsort.c | 1 + src/backend/access/nbtree/nbtutils.c | 1 + src/include/access/nbtree.h | 7 ++++++- 10 files changed, 15 insertions(+), 1 deletion(-) diff --git a/contrib/amcheck/verify_nbtree.c b/contrib/amcheck/verify_nbtree.c index b74ab5f7a05..40d191f2f73 100644 --- a/contrib/amcheck/verify_nbtree.c +++ b/contrib/amcheck/verify_nbtree.c @@ -37,6 +37,7 @@ #include "common/pg_prng.h" #include "lib/bloomfilter.h" #include "miscadmin.h" +#include "storage/bufmgr.h" #include "storage/smgr.h" #include "utils/guc.h" #include "utils/memutils.h" diff --git a/contrib/pageinspect/btreefuncs.c b/contrib/pageinspect/btreefuncs.c index 0585b7cee40..4fb2abe4a77 100644 --- a/contrib/pageinspect/btreefuncs.c +++ b/contrib/pageinspect/btreefuncs.c @@ -36,6 +36,7 @@ #include "funcapi.h" #include "miscadmin.h" #include "pageinspect.h" +#include "storage/bufmgr.h" #include "utils/array.h" #include "utils/builtins.h" #include "utils/rel.h" diff --git a/src/backend/access/nbtree/nbtdedup.c b/src/backend/access/nbtree/nbtdedup.c index af7affdf409..73f885a8759 100644 --- a/src/backend/access/nbtree/nbtdedup.c +++ b/src/backend/access/nbtree/nbtdedup.c @@ -19,6 +19,7 @@ #include "access/tableam.h" #include "access/xloginsert.h" #include "miscadmin.h" +#include "storage/bufmgr.h" #include "utils/rel.h" static void _bt_bottomupdel_finish_pending(Page page, BTDedupState state, diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c index c8af97dd23d..71e9777410c 100644 --- a/src/backend/access/nbtree/nbtinsert.c +++ b/src/backend/access/nbtree/nbtinsert.c @@ -24,6 +24,7 @@ #include "common/pg_prng.h" #include "lib/qunique.h" #include "miscadmin.h" +#include "storage/bufmgr.h" #include "storage/lmgr.h" #include "storage/predicate.h" #include "utils/injection_point.h" diff --git a/src/backend/access/nbtree/nbtpage.c b/src/backend/access/nbtree/nbtpage.c index 0547038616e..79810280e13 100644 --- a/src/backend/access/nbtree/nbtpage.c +++ b/src/backend/access/nbtree/nbtpage.c @@ -30,6 +30,7 @@ #include "access/xloginsert.h" #include "common/int.h" #include "miscadmin.h" +#include "storage/bufmgr.h" #include "storage/indexfsm.h" #include "storage/predicate.h" #include "storage/procarray.h" diff --git a/src/backend/access/nbtree/nbtreadpage.c b/src/backend/access/nbtree/nbtreadpage.c index 2ba1ca66023..6c2f5a32085 100644 --- a/src/backend/access/nbtree/nbtreadpage.c +++ b/src/backend/access/nbtree/nbtreadpage.c @@ -20,6 +20,7 @@ #include "access/nbtree.h" #include "access/relscan.h" +#include "storage/bufmgr.h" #include "storage/predicate.h" #include "utils/datum.h" #include "utils/rel.h" diff --git a/src/backend/access/nbtree/nbtsearch.c b/src/backend/access/nbtree/nbtsearch.c index aae6acb7f57..02796230bca 100644 --- a/src/backend/access/nbtree/nbtsearch.c +++ b/src/backend/access/nbtree/nbtsearch.c @@ -21,6 +21,7 @@ #include "executor/instrument_node.h" #include "miscadmin.h" #include "pgstat.h" +#include "storage/bufmgr.h" #include "storage/predicate.h" #include "utils/lsyscache.h" #include "utils/rel.h" diff --git a/src/backend/access/nbtree/nbtsort.c b/src/backend/access/nbtree/nbtsort.c index 756dfa3dcf4..9718f3ef308 100644 --- a/src/backend/access/nbtree/nbtsort.c +++ b/src/backend/access/nbtree/nbtsort.c @@ -51,6 +51,7 @@ #include "executor/instrument.h" #include "miscadmin.h" #include "pgstat.h" +#include "storage/bufmgr.h" #include "storage/bulk_write.h" #include "storage/condition_variable.h" #include "storage/proc.h" diff --git a/src/backend/access/nbtree/nbtutils.c b/src/backend/access/nbtree/nbtutils.c index 732bc750c9e..9f41652bdbe 100644 --- a/src/backend/access/nbtree/nbtutils.c +++ b/src/backend/access/nbtree/nbtutils.c @@ -24,6 +24,7 @@ #include "common/int.h" #include "lib/qunique.h" #include "miscadmin.h" +#include "storage/bufmgr.h" #include "storage/lwlock.h" #include "utils/datum.h" #include "utils/lsyscache.h" diff --git a/src/include/access/nbtree.h b/src/include/access/nbtree.h index bf166bf8ac9..5847cfe7ac0 100644 --- a/src/include/access/nbtree.h +++ b/src/include/access/nbtree.h @@ -22,12 +22,17 @@ #include "catalog/pg_class.h" #include "catalog/pg_index.h" #include "lib/stringinfo.h" -#include "storage/bufmgr.h" #include "storage/dsm.h" #include "storage/shm_toc.h" #include "utils/snapmgr.h" #include "utils/skipsupport.h" +/* + * forward declarations in this file + */ +typedef int Buffer; + + /* There's room for a 16-bit vacuum cycle ID in BTPageOpaqueData */ typedef uint16 BTCycleId; -- 2.47.3
>From 3442ea160f6626e74b2b92d5e4277b7eb062af18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Herrera?= <[email protected]> Date: Thu, 2 Apr 2026 20:04:24 +0200 Subject: [PATCH 2/5] don't include bufmgr.h in hash.h --- contrib/pageinspect/hashfuncs.c | 1 + src/backend/access/hash/hashinsert.c | 1 + src/backend/access/hash/hashovfl.c | 1 + src/backend/access/hash/hashpage.c | 1 + src/backend/access/hash/hashsearch.c | 1 + src/backend/access/hash/hashutil.c | 1 + src/include/access/hash.h | 6 +++++- 7 files changed, 11 insertions(+), 1 deletion(-) diff --git a/contrib/pageinspect/hashfuncs.c b/contrib/pageinspect/hashfuncs.c index 7fc97d043ce..9fe4e53ff20 100644 --- a/contrib/pageinspect/hashfuncs.c +++ b/contrib/pageinspect/hashfuncs.c @@ -18,6 +18,7 @@ #include "funcapi.h" #include "miscadmin.h" #include "pageinspect.h" +#include "storage/bufmgr.h" #include "utils/array.h" #include "utils/builtins.h" #include "utils/rel.h" diff --git a/src/backend/access/hash/hashinsert.c b/src/backend/access/hash/hashinsert.c index 3395bbc13f8..d342dacfc3e 100644 --- a/src/backend/access/hash/hashinsert.c +++ b/src/backend/access/hash/hashinsert.c @@ -19,6 +19,7 @@ #include "access/hash_xlog.h" #include "access/xloginsert.h" #include "miscadmin.h" +#include "storage/bufmgr.h" #include "storage/predicate.h" #include "utils/rel.h" diff --git a/src/backend/access/hash/hashovfl.c b/src/backend/access/hash/hashovfl.c index dbc57ef958c..039b4083a3e 100644 --- a/src/backend/access/hash/hashovfl.c +++ b/src/backend/access/hash/hashovfl.c @@ -21,6 +21,7 @@ #include "access/hash_xlog.h" #include "access/xloginsert.h" #include "miscadmin.h" +#include "storage/bufmgr.h" #include "utils/rel.h" diff --git a/src/backend/access/hash/hashpage.c b/src/backend/access/hash/hashpage.c index 8099b0d021f..46f4c3b844c 100644 --- a/src/backend/access/hash/hashpage.c +++ b/src/backend/access/hash/hashpage.c @@ -33,6 +33,7 @@ #include "access/xloginsert.h" #include "miscadmin.h" #include "port/pg_bitutils.h" +#include "storage/bufmgr.h" #include "storage/predicate.h" #include "storage/smgr.h" #include "utils/rel.h" diff --git a/src/backend/access/hash/hashsearch.c b/src/backend/access/hash/hashsearch.c index 89d1c5bc6d7..1e457b67bf3 100644 --- a/src/backend/access/hash/hashsearch.c +++ b/src/backend/access/hash/hashsearch.c @@ -19,6 +19,7 @@ #include "miscadmin.h" #include "executor/instrument_node.h" #include "pgstat.h" +#include "storage/bufmgr.h" #include "storage/predicate.h" #include "utils/rel.h" diff --git a/src/backend/access/hash/hashutil.c b/src/backend/access/hash/hashutil.c index 081adbc88a6..b6597e2e4f7 100644 --- a/src/backend/access/hash/hashutil.c +++ b/src/backend/access/hash/hashutil.c @@ -18,6 +18,7 @@ #include "access/reloptions.h" #include "access/relscan.h" #include "port/pg_bitutils.h" +#include "storage/bufmgr.h" #include "utils/lsyscache.h" #include "utils/rel.h" diff --git a/src/include/access/hash.h b/src/include/access/hash.h index a8702f0e5ea..07b658efbf0 100644 --- a/src/include/access/hash.h +++ b/src/include/access/hash.h @@ -23,11 +23,15 @@ #include "catalog/pg_am_d.h" #include "common/hashfn.h" #include "lib/stringinfo.h" -#include "storage/bufmgr.h" #include "storage/lockdefs.h" #include "utils/hsearch.h" #include "utils/relcache.h" +/* + * forward declarations in this file + */ +typedef int Buffer; + /* * Mapping from hash bucket number to physical block number of bucket's * starting page. Beware of multiple evaluations of argument! -- 2.47.3
>From 87e674d72a4b8fdeabb17a09b49dd53d46e0c247 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Herrera?= <[email protected]> Date: Thu, 2 Apr 2026 20:07:17 +0200 Subject: [PATCH 3/5] don't include bufmgr.h in gist_private.h --- src/backend/access/gist/gist.c | 1 + src/backend/access/gist/gistget.c | 1 + src/backend/access/gist/gistutil.c | 1 + src/include/access/gist_private.h | 6 +++++- 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/backend/access/gist/gist.c b/src/backend/access/gist/gist.c index 8565e225be7..d03624e2f72 100644 --- a/src/backend/access/gist/gist.c +++ b/src/backend/access/gist/gist.c @@ -21,6 +21,7 @@ #include "commands/vacuum.h" #include "miscadmin.h" #include "nodes/execnodes.h" +#include "storage/bufmgr.h" #include "storage/predicate.h" #include "utils/fmgrprotos.h" #include "utils/index_selfuncs.h" diff --git a/src/backend/access/gist/gistget.c b/src/backend/access/gist/gistget.c index 4d7c100d737..6dbd0ac7ba8 100644 --- a/src/backend/access/gist/gistget.c +++ b/src/backend/access/gist/gistget.c @@ -21,6 +21,7 @@ #include "lib/pairingheap.h" #include "miscadmin.h" #include "pgstat.h" +#include "storage/bufmgr.h" #include "storage/predicate.h" #include "utils/float.h" #include "utils/memutils.h" diff --git a/src/backend/access/gist/gistutil.c b/src/backend/access/gist/gistutil.c index 0f58f61879f..8020bd25f5b 100644 --- a/src/backend/access/gist/gistutil.c +++ b/src/backend/access/gist/gistutil.c @@ -19,6 +19,7 @@ #include "access/htup_details.h" #include "access/reloptions.h" #include "common/pg_prng.h" +#include "storage/bufmgr.h" #include "storage/indexfsm.h" #include "utils/float.h" #include "utils/fmgrprotos.h" diff --git a/src/include/access/gist_private.h b/src/include/access/gist_private.h index 44514f1cb8d..60a470f2986 100644 --- a/src/include/access/gist_private.h +++ b/src/include/access/gist_private.h @@ -18,11 +18,15 @@ #include "access/gist.h" #include "access/itup.h" #include "lib/pairingheap.h" -#include "storage/bufmgr.h" #include "storage/buffile.h" #include "utils/hsearch.h" #include "access/genam.h" +/* + * forward references in this file + */ +typedef int Buffer; + /* * Maximum number of "halves" a page can be split into in one operation. * Typically a split produces 2 halves, but can be more if keys have very -- 2.47.3
>From 0dc712fab1c53537ce1ad38d457a454d941cf41a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Herrera?= <[email protected]> Date: Thu, 2 Apr 2026 20:10:17 +0200 Subject: [PATCH 4/5] don't include bufmgr.h in gin_private.h --- contrib/amcheck/verify_gin.c | 1 + src/backend/access/common/reloptions.c | 1 + src/backend/access/gin/ginbtree.c | 1 + src/backend/access/gin/gindatapage.c | 1 + src/backend/access/gin/ginentrypage.c | 1 + src/backend/access/gin/ginfast.c | 1 + src/backend/access/gin/ginget.c | 1 + src/backend/access/gin/ginscan.c | 1 + src/backend/access/gin/ginutil.c | 1 + src/include/access/gin_private.h | 6 +++++- 10 files changed, 14 insertions(+), 1 deletion(-) diff --git a/contrib/amcheck/verify_gin.c b/contrib/amcheck/verify_gin.c index abfad07d5e4..e9fe1e3b53b 100644 --- a/contrib/amcheck/verify_gin.c +++ b/contrib/amcheck/verify_gin.c @@ -25,6 +25,7 @@ #include "access/gin_private.h" #include "access/nbtree.h" #include "catalog/pg_am.h" +#include "storage/bufmgr.h" #include "utils/memutils.h" #include "utils/rel.h" #include "verify_common.h" diff --git a/src/backend/access/common/reloptions.c b/src/backend/access/common/reloptions.c index b41eafd7691..0632e40a25b 100644 --- a/src/backend/access/common/reloptions.c +++ b/src/backend/access/common/reloptions.c @@ -28,6 +28,7 @@ #include "commands/defrem.h" #include "commands/tablespace.h" #include "nodes/makefuncs.h" +#include "storage/bufmgr.h" #include "storage/lock.h" #include "utils/array.h" #include "utils/attoptcache.h" diff --git a/src/backend/access/gin/ginbtree.c b/src/backend/access/gin/ginbtree.c index 3d3a9da56b1..54286793507 100644 --- a/src/backend/access/gin/ginbtree.c +++ b/src/backend/access/gin/ginbtree.c @@ -18,6 +18,7 @@ #include "access/ginxlog.h" #include "access/xloginsert.h" #include "miscadmin.h" +#include "storage/bufmgr.h" #include "storage/predicate.h" #include "utils/injection_point.h" #include "utils/memutils.h" diff --git a/src/backend/access/gin/gindatapage.c b/src/backend/access/gin/gindatapage.c index c5d7db28077..3956cc4f39b 100644 --- a/src/backend/access/gin/gindatapage.c +++ b/src/backend/access/gin/gindatapage.c @@ -19,6 +19,7 @@ #include "access/xloginsert.h" #include "lib/ilist.h" #include "miscadmin.h" +#include "storage/bufmgr.h" #include "storage/predicate.h" #include "utils/rel.h" diff --git a/src/backend/access/gin/ginentrypage.c b/src/backend/access/gin/ginentrypage.c index f818132eceb..202d21ad2a1 100644 --- a/src/backend/access/gin/ginentrypage.c +++ b/src/backend/access/gin/ginentrypage.c @@ -17,6 +17,7 @@ #include "access/gin_private.h" #include "access/ginxlog.h" #include "access/xloginsert.h" +#include "storage/bufmgr.h" #include "utils/rel.h" static void entrySplitPage(GinBtree btree, Buffer origbuf, diff --git a/src/backend/access/gin/ginfast.c b/src/backend/access/gin/ginfast.c index f50848eb65a..c8c57d7e681 100644 --- a/src/backend/access/gin/ginfast.c +++ b/src/backend/access/gin/ginfast.c @@ -27,6 +27,7 @@ #include "miscadmin.h" #include "port/pg_bitutils.h" #include "postmaster/autovacuum.h" +#include "storage/bufmgr.h" #include "storage/indexfsm.h" #include "storage/lmgr.h" #include "storage/predicate.h" diff --git a/src/backend/access/gin/ginget.c b/src/backend/access/gin/ginget.c index 6b148e69a8e..2d321e3b7ee 100644 --- a/src/backend/access/gin/ginget.c +++ b/src/backend/access/gin/ginget.c @@ -18,6 +18,7 @@ #include "access/relscan.h" #include "common/pg_prng.h" #include "miscadmin.h" +#include "storage/bufmgr.h" #include "storage/predicate.h" #include "utils/datum.h" #include "utils/memutils.h" diff --git a/src/backend/access/gin/ginscan.c b/src/backend/access/gin/ginscan.c index fb929761ab7..88b15f0e221 100644 --- a/src/backend/access/gin/ginscan.c +++ b/src/backend/access/gin/ginscan.c @@ -18,6 +18,7 @@ #include "access/relscan.h" #include "executor/instrument_node.h" #include "pgstat.h" +#include "storage/bufmgr.h" #include "utils/memutils.h" #include "utils/rel.h" diff --git a/src/backend/access/gin/ginutil.c b/src/backend/access/gin/ginutil.c index fe7b984ff32..a8171e5c95e 100644 --- a/src/backend/access/gin/ginutil.c +++ b/src/backend/access/gin/ginutil.c @@ -23,6 +23,7 @@ #include "commands/progress.h" #include "commands/vacuum.h" #include "miscadmin.h" +#include "storage/bufmgr.h" #include "storage/indexfsm.h" #include "utils/builtins.h" #include "utils/index_selfuncs.h" diff --git a/src/include/access/gin_private.h b/src/include/access/gin_private.h index 4445d088fa0..0e7bf3ec8a8 100644 --- a/src/include/access/gin_private.h +++ b/src/include/access/gin_private.h @@ -20,7 +20,11 @@ #include "fmgr.h" #include "lib/rbtree.h" #include "nodes/tidbitmap.h" -#include "storage/bufmgr.h" + +/* + * forward references in this file + */ +typedef int Buffer; /* * Storage type for GIN's reloptions -- 2.47.3
>From a8ad6bfa99c386fd7f354b4dbad9ce2f2444f776 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Herrera?= <[email protected]> Date: Thu, 2 Apr 2026 20:12:25 +0200 Subject: [PATCH 5/5] don't include bufmgr.h in bufmask.h --- src/include/access/bufmask.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/include/access/bufmask.h b/src/include/access/bufmask.h index 1e3f2006735..ed79f4d1ba0 100644 --- a/src/include/access/bufmask.h +++ b/src/include/access/bufmask.h @@ -18,7 +18,7 @@ #define BUFMASK_H #include "storage/block.h" -#include "storage/bufmgr.h" +#include "storage/bufpage.h" /* Marker used to mask pages consistently */ #define MASK_MARKER 0 -- 2.47.3
