Hi,

I applied your patch and it compiles today.
However, three of the four removed headers are not actually unused. The
file still calls functions
declared in them directly, and only keeps compiling because some other
still-included header
happens to drag them back in transitively.

$ pwd
  pg20/contrib/pg_stat_statements
$ make clean
$ make > a.compile
$ make install > a.install
$ make installcheck
echo "# +++ regress install-check in contrib/pg_stat_statements +++" &&
../../src/test/regress/pg_regress --inputdir=.
--bindir='/home/vaibhav/work/workspace/pg/pg20/db/bin'    --temp-config
../../contrib/pg_stat_statements/pg_stat_statements.conf
--dbname=contrib_regression select dml cursors utility level_tracking
planning user_activity wal entry_timestamp privileges extended parallel
plancache squashing cleanup oldextversions
# +++ regress install-check in contrib/pg_stat_statements +++
# using postmaster on Unix socket, default port
ok 1         - select                                     78 ms
ok 2         - dml                                        20 ms
ok 3         - cursors                                    11 ms
ok 4         - utility                                    86 ms
ok 5         - level_tracking                             74 ms
ok 6         - planning                                    9 ms
ok 7         - user_activity                              11 ms
ok 8         - wal                                        10 ms
ok 9         - entry_timestamp                            11 ms
ok 10        - privileges                                 13 ms
ok 11        - extended                                   14 ms
ok 12        - parallel                                   15 ms
ok 13        - plancache                                  17 ms
ok 14        - squashing                                  52 ms
ok 15        - cleanup                                     6 ms
ok 16        - oldextversions                             59 ms
1..16
# All 16 tests passed.
echo "# +++ tap install-check in contrib/pg_stat_statements +++" && rm -rf
'/home/vaibhav/work/workspace/pg/pg20/contrib/pg_stat_statements'/tmp_check
&& /usr/bin/mkdir -p
'/home/vaibhav/work/workspace/pg/pg20/contrib/pg_stat_statements'/tmp_check
&& cd . &&
TESTLOGDIR='/home/vaibhav/work/workspace/pg/pg20/contrib/pg_stat_statements/tmp_check/log'
TESTDATADIR='/home/vaibhav/work/workspace/pg/pg20/contrib/pg_stat_statements/tmp_check'
PATH="/home/vaibhav/work/workspace/pg/pg20/db/bin:/home/vaibhav/work/workspace/pg/pg20/contrib/pg_stat_statements:$PATH"
PGPORT='65520'
top_builddir='/home/vaibhav/work/workspace/pg/pg20/contrib/pg_stat_statements/../..'
PG_REGRESS='/home/vaibhav/work/workspace/pg/pg20/contrib/pg_stat_statements/../../src/test/regress/pg_regress'
share_contrib_dir='/home/vaibhav/work/workspace/pg/pg20/db/share/postgresql/extension'
/usr/bin/prove -I ../../src/test/perl/ -I .  t/*.pl
# +++ tap install-check in contrib/pg_stat_statements +++
t/010_restart.pl .. ok
All tests successful.
Files=1, Tests=3,  2 wallclock secs ( 0.01 usr  0.00 sys +  0.68 cusr  0.10
csys =  0.79 CPU)
Result: PASS

*executor/instrument.h*
Still used directly in the file: BufferUsage, WalUsage, instr_time — used
as function params/locals in pgss_store() and the
ExecutorRun hook
Why it still compiles: Only because jit/jit.h (still included) includes it
for its own JitInstrumentation needs
────────────────────────────────────────
*miscadmin.h*
Still used directly in the file: IsParallelWorker(), IsUnderPostmaster,
MyDatabaseId
Why it still compiles: Only because pgstat.h → utils/backend_status.h
includes it, literally commented /* for BackendType */
in that header i.e. for backend_status.h's own use, not as a re-export
────────────────────────────────────────
*nodes/queryjumble.h*
Still used directly in the file: JumbleState (6 uses: hook signature,
pgss_store(), etc.)
Why it still compiles: Only because parser/analyze.h (still included)
includes it — this pairing is a bit more natural since
that's where the post_parse_analyze_hook signature needing JumbleState
lives, but it's still an indirect dependency
────────────────────────────────────────
*utils/memutils.h*
Still used directly in the file: Nothing. no
MemoryContext/CurrentMemoryContext/etc. symbols found anywhere in the file
Why it still compiles: Genuinely safe to remove

Regards,
Vaibhav Dalvi
EnterpriseDB


On Mon, Sep 14, 2026 at 4:44 PM <[email protected]> wrote:

> Hi, hackers!
>
> I accidentially found that some headers in pg_stat_statements are
> redundant.
> A small patch with removed headers is attached.
>
> Kind regards,
> Postgres Professional: http://www.postgrespro.com
>

Reply via email to