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

Reply via email to