I have done a pass over much of the source code with
include-what-you-use (IWYU) to remove superfluous includes (commits
dbbca2cf299, 9be4e5d293b, ecb5af77987). Along the way I have collected
some pragma annotations to deal with exceptions and special cases and
peculiarities of the PostgreSQL source code header structures (see [0]
for description). Here I'm proposing a set of patches to add such
annotations in commonly useful cases that should deal with most of the
noise.
[0]:
https://github.com/include-what-you-use/include-what-you-use/blob/master/docs/IWYUPragmas.mdFrom 0ee1c6c9f620ca8e1e3f9c601e5aa335a95c91d3 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pe...@eisentraut.org>
Date: Mon, 9 Dec 2024 12:25:10 +0100
Subject: [PATCH 1/2] IWYU widely useful pragmas
Add various widely useful "IWYU pragma" annotations, such as
- Common header files such as c.h, postgres.h should be "always_keep".
- System headers included in c.h, postgres.h etc. should be considered
"export".
- Some portability headers such as getopt_long.h should be
"always_keep", so they are not considered superfluous on some
platforms.
- Certain system headers included from portability headers should be
considered "export" because the purpose of the portability header is
to wrap them.
- Superfluous includes marked as "for backward compatibility" get a
formal IWYU annotation.
- Special handling of access/rmgrlist.h in
src/bin/pg_waldump/rmgrdesc.c, similar to what was already done in
src/backend/access/transam/rmgr.c.
- Generated header included in utils/syscache.h is marked exported.
This is a very commonly used include and this avoids lots of
complaints.
---
src/bin/pg_waldump/rmgrdesc.c | 10 +++++++---
src/include/c.h | 5 +++++
src/include/getopt_long.h | 3 ++-
src/include/pg_getopt.h | 5 +++--
src/include/pg_trace.h | 2 +-
src/include/pgstat.h | 6 +++---
src/include/port/pg_iovec.h | 2 +-
src/include/port/pg_pthread.h | 2 +-
src/include/postgres.h | 5 +++++
src/include/postgres_ext.h | 1 +
src/include/postgres_fe.h | 5 +++++
src/include/utils/syscache.h | 2 +-
src/interfaces/libpq/libpq-int.h | 2 ++
13 files changed, 37 insertions(+), 13 deletions(-)
diff --git a/src/bin/pg_waldump/rmgrdesc.c b/src/bin/pg_waldump/rmgrdesc.c
index 6b8c17bb4c4..f5f53ceda32 100644
--- a/src/bin/pg_waldump/rmgrdesc.c
+++ b/src/bin/pg_waldump/rmgrdesc.c
@@ -8,6 +8,12 @@
#define FRONTEND 1
#include "postgres.h"
+#include "access/rmgr.h"
+#include "access/xlog_internal.h"
+#include "rmgrdesc.h"
+
+/* includes needed for "access/rmgrlist.h" */
+/* IWYU pragma: begin_keep */
#include "access/brin_xlog.h"
#include "access/clog.h"
#include "access/commit_ts.h"
@@ -18,19 +24,17 @@
#include "access/heapam_xlog.h"
#include "access/multixact.h"
#include "access/nbtxlog.h"
-#include "access/rmgr.h"
#include "access/spgxlog.h"
#include "access/xact.h"
-#include "access/xlog_internal.h"
#include "catalog/storage_xlog.h"
#include "commands/dbcommands_xlog.h"
#include "commands/sequence.h"
#include "commands/tablespace.h"
#include "replication/message.h"
#include "replication/origin.h"
-#include "rmgrdesc.h"
#include "storage/standbydefs.h"
#include "utils/relmapper.h"
+/* IWYU pragma: end_keep */
#define PG_RMGR(symname,name,redo,desc,identify,startup,cleanup,mask,decode) \
{ name, desc, identify},
diff --git a/src/include/c.h b/src/include/c.h
index 13bb39fdef3..884128e781d 100644
--- a/src/include/c.h
+++ b/src/include/c.h
@@ -16,6 +16,7 @@
*
*-------------------------------------------------------------------------
*/
+/* IWYU pragma: always_keep */
/*
*----------------------------------------------------------------
* TABLE OF CONTENTS
@@ -46,6 +47,8 @@
#ifndef C_H
#define C_H
+/* IWYU pragma: begin_exports */
+
/*
* These headers must be included before any system headers, because on some
* platforms they affect the behavior of the system headers (for example, by
@@ -1327,4 +1330,6 @@ typedef intptr_t sigjmp_buf[5];
/* /port compatibility functions */
#include "port.h"
+/* IWYU pragma: end_exports */
+
#endif /* C_H */
diff --git a/src/include/getopt_long.h b/src/include/getopt_long.h
index 0fdbefae7fb..a15ebbc0037 100644
--- a/src/include/getopt_long.h
+++ b/src/include/getopt_long.h
@@ -6,10 +6,11 @@
*
* src/include/getopt_long.h
*/
+/* IWYU pragma: always_keep */
#ifndef GETOPT_LONG_H
#define GETOPT_LONG_H
-#include "pg_getopt.h"
+#include "pg_getopt.h" /* IWYU pragma: export */
#ifndef HAVE_STRUCT_OPTION
diff --git a/src/include/pg_getopt.h b/src/include/pg_getopt.h
index c87ea20b14f..698cc61ce83 100644
--- a/src/include/pg_getopt.h
+++ b/src/include/pg_getopt.h
@@ -15,15 +15,16 @@
*
* src/include/pg_getopt.h
*/
+/* IWYU pragma: always_keep */
#ifndef PG_GETOPT_H
#define PG_GETOPT_H
/* POSIX says getopt() is provided by unistd.h */
-#include <unistd.h>
+#include <unistd.h> /* IWYU pragma: export */
/* rely on the system's getopt.h if present */
#ifdef HAVE_GETOPT_H
-#include <getopt.h>
+#include <getopt.h> /* IWYU pragma: export */
#endif
/*
diff --git a/src/include/pg_trace.h b/src/include/pg_trace.h
index bae819ab466..00c172d7435 100644
--- a/src/include/pg_trace.h
+++ b/src/include/pg_trace.h
@@ -12,6 +12,6 @@
#ifndef PG_TRACE_H
#define PG_TRACE_H
-#include "utils/probes.h" /* pgrminclude ignore */
+#include "utils/probes.h" /* pgrminclude ignore */ /* IWYU
pragma: export */
#endif /* PG_TRACE_H */
diff --git a/src/include/pgstat.h b/src/include/pgstat.h
index 59c28b4aca8..5fe9158559f 100644
--- a/src/include/pgstat.h
+++ b/src/include/pgstat.h
@@ -16,10 +16,10 @@
#include "portability/instr_time.h"
#include "postmaster/pgarch.h" /* for MAX_XFN_CHARS */
#include "replication/conflict.h"
-#include "utils/backend_progress.h" /* for backward compatibility */
-#include "utils/backend_status.h" /* for backward compatibility */
+#include "utils/backend_progress.h" /* for backward compatibility */ /* IWYU
pragma: export */
+#include "utils/backend_status.h" /* for backward compatibility */
/* IWYU pragma: export */
#include "utils/relcache.h"
-#include "utils/wait_event.h" /* for backward compatibility */
+#include "utils/wait_event.h" /* for backward compatibility */ /* IWYU
pragma: export */
/* ----------
diff --git a/src/include/port/pg_iovec.h b/src/include/port/pg_iovec.h
index e5fe677b371..7df67b081fa 100644
--- a/src/include/port/pg_iovec.h
+++ b/src/include/port/pg_iovec.h
@@ -16,7 +16,7 @@
#ifndef WIN32
#include <limits.h>
-#include <sys/uio.h>
+#include <sys/uio.h> /* IWYU pragma: export */
#include <unistd.h>
#else
diff --git a/src/include/port/pg_pthread.h b/src/include/port/pg_pthread.h
index d102ce9d6f3..4dbb3c8a52f 100644
--- a/src/include/port/pg_pthread.h
+++ b/src/include/port/pg_pthread.h
@@ -13,7 +13,7 @@
#ifndef PG_PTHREAD_H
#define PG_PTHREAD_H
-#include <pthread.h>
+#include <pthread.h> /* IWYU pragma: export */
#ifndef HAVE_PTHREAD_BARRIER_WAIT
diff --git a/src/include/postgres.h b/src/include/postgres.h
index 5d5fd7813e8..65e574c8570 100644
--- a/src/include/postgres.h
+++ b/src/include/postgres.h
@@ -14,6 +14,7 @@
*
*-------------------------------------------------------------------------
*/
+/* IWYU pragma: always_keep */
/*
*----------------------------------------------------------------
* TABLE OF CONTENTS
@@ -42,10 +43,14 @@
#ifndef POSTGRES_H
#define POSTGRES_H
+/* IWYU pragma: begin_exports */
+
#include "c.h"
#include "utils/elog.h"
#include "utils/palloc.h"
+/* IWYU pragma: end_exports */
+
/* ----------------------------------------------------------------
* Section 1: Datum type + support functions
* ----------------------------------------------------------------
diff --git a/src/include/postgres_ext.h b/src/include/postgres_ext.h
index 202eb049622..9f2e3c52972 100644
--- a/src/include/postgres_ext.h
+++ b/src/include/postgres_ext.h
@@ -19,6 +19,7 @@
*
*-------------------------------------------------------------------------
*/
+/* IWYU pragma: always_keep */
#ifndef POSTGRES_EXT_H
#define POSTGRES_EXT_H
diff --git a/src/include/postgres_fe.h b/src/include/postgres_fe.h
index 9c605daa365..33eb594380c 100644
--- a/src/include/postgres_fe.h
+++ b/src/include/postgres_fe.h
@@ -15,6 +15,7 @@
*
*-------------------------------------------------------------------------
*/
+/* IWYU pragma: always_keep */
#ifndef POSTGRES_FE_H
#define POSTGRES_FE_H
@@ -22,8 +23,12 @@
#define FRONTEND 1
#endif
+/* IWYU pragma: begin_exports */
+
#include "c.h"
#include "common/fe_memutils.h"
+/* IWYU pragma: end_exports */
+
#endif /* POSTGRES_FE_H */
diff --git a/src/include/utils/syscache.h b/src/include/utils/syscache.h
index b541911c8fc..c71934f1e86 100644
--- a/src/include/utils/syscache.h
+++ b/src/include/utils/syscache.h
@@ -20,7 +20,7 @@
#include "access/htup.h"
/* we intentionally do not include utils/catcache.h here */
-#include "catalog/syscache_ids.h"
+#include "catalog/syscache_ids.h" /* IWYU pragma: export */
extern void InitCatalogCache(void);
extern void InitCatalogCachePhase2(void);
diff --git a/src/interfaces/libpq/libpq-int.h b/src/interfaces/libpq/libpq-int.h
index 4606eb2ad34..3fff069598e 100644
--- a/src/interfaces/libpq/libpq-int.h
+++ b/src/interfaces/libpq/libpq-int.h
@@ -41,6 +41,7 @@
#include "fe-auth-sasl.h"
#include "pqexpbuffer.h"
+/* IWYU pragma: begin_exports */
#ifdef ENABLE_GSS
#if defined(HAVE_GSSAPI_H)
#include <gssapi.h>
@@ -48,6 +49,7 @@
#include <gssapi/gssapi.h>
#endif
#endif
+/* IWYU pragma: end_exports */
#ifdef ENABLE_SSPI
#define SECURITY_WIN32
--
2.47.1
From 06e03c04b65abb16ad606e5e1415868eecf51c37 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pe...@eisentraut.org>
Date: Mon, 9 Dec 2024 12:25:25 +0100
Subject: [PATCH 2/2] IWYU pragmas for catalog headers
Add "IWYU pragma: export" annotations in each catalog header file so
that, for instance, including "catalog/pg_aggregate.h" is considered
acceptable in place of "catalog/pg_aggregate_d.h". This is very
common and it seems better to silence IWYU about it than trying to fix
this up.
---
src/include/catalog/pg_aggregate.h | 2 +-
src/include/catalog/pg_am.h | 2 +-
src/include/catalog/pg_amop.h | 2 +-
src/include/catalog/pg_amproc.h | 2 +-
src/include/catalog/pg_attrdef.h | 2 +-
src/include/catalog/pg_attribute.h | 2 +-
src/include/catalog/pg_auth_members.h | 2 +-
src/include/catalog/pg_authid.h | 2 +-
src/include/catalog/pg_cast.h | 2 +-
src/include/catalog/pg_class.h | 2 +-
src/include/catalog/pg_collation.h | 2 +-
src/include/catalog/pg_constraint.h | 2 +-
src/include/catalog/pg_conversion.h | 2 +-
src/include/catalog/pg_database.h | 2 +-
src/include/catalog/pg_db_role_setting.h | 2 +-
src/include/catalog/pg_default_acl.h | 2 +-
src/include/catalog/pg_depend.h | 2 +-
src/include/catalog/pg_description.h | 2 +-
src/include/catalog/pg_enum.h | 2 +-
src/include/catalog/pg_event_trigger.h | 2 +-
src/include/catalog/pg_extension.h | 2 +-
src/include/catalog/pg_foreign_data_wrapper.h | 2 +-
src/include/catalog/pg_foreign_server.h | 2 +-
src/include/catalog/pg_foreign_table.h | 2 +-
src/include/catalog/pg_index.h | 2 +-
src/include/catalog/pg_inherits.h | 2 +-
src/include/catalog/pg_init_privs.h | 2 +-
src/include/catalog/pg_language.h | 2 +-
src/include/catalog/pg_largeobject.h | 2 +-
src/include/catalog/pg_largeobject_metadata.h | 2 +-
src/include/catalog/pg_namespace.h | 2 +-
src/include/catalog/pg_opclass.h | 2 +-
src/include/catalog/pg_operator.h | 2 +-
src/include/catalog/pg_opfamily.h | 2 +-
src/include/catalog/pg_parameter_acl.h | 2 +-
src/include/catalog/pg_partitioned_table.h | 2 +-
src/include/catalog/pg_policy.h | 2 +-
src/include/catalog/pg_proc.h | 2 +-
src/include/catalog/pg_publication.h | 2 +-
src/include/catalog/pg_publication_namespace.h | 2 +-
src/include/catalog/pg_publication_rel.h | 2 +-
src/include/catalog/pg_range.h | 2 +-
src/include/catalog/pg_replication_origin.h | 2 +-
src/include/catalog/pg_rewrite.h | 2 +-
src/include/catalog/pg_seclabel.h | 2 +-
src/include/catalog/pg_sequence.h | 2 +-
src/include/catalog/pg_shdepend.h | 2 +-
src/include/catalog/pg_shdescription.h | 2 +-
src/include/catalog/pg_shseclabel.h | 2 +-
src/include/catalog/pg_statistic.h | 2 +-
src/include/catalog/pg_statistic_ext.h | 2 +-
src/include/catalog/pg_statistic_ext_data.h | 2 +-
src/include/catalog/pg_subscription.h | 2 +-
src/include/catalog/pg_subscription_rel.h | 2 +-
src/include/catalog/pg_tablespace.h | 2 +-
src/include/catalog/pg_transform.h | 2 +-
src/include/catalog/pg_trigger.h | 2 +-
src/include/catalog/pg_ts_config.h | 2 +-
src/include/catalog/pg_ts_dict.h | 2 +-
src/include/catalog/pg_ts_parser.h | 2 +-
src/include/catalog/pg_ts_template.h | 2 +-
src/include/catalog/pg_type.h | 2 +-
src/include/catalog/pg_user_mapping.h | 2 +-
63 files changed, 63 insertions(+), 63 deletions(-)
diff --git a/src/include/catalog/pg_aggregate.h
b/src/include/catalog/pg_aggregate.h
index 490f6454695..ba490e45a12 100644
--- a/src/include/catalog/pg_aggregate.h
+++ b/src/include/catalog/pg_aggregate.h
@@ -19,7 +19,7 @@
#define PG_AGGREGATE_H
#include "catalog/genbki.h"
-#include "catalog/pg_aggregate_d.h"
+#include "catalog/pg_aggregate_d.h" /* IWYU pragma: export */
#include "catalog/objectaddress.h"
#include "nodes/pg_list.h"
diff --git a/src/include/catalog/pg_am.h b/src/include/catalog/pg_am.h
index 475593fad4c..5be4accff72 100644
--- a/src/include/catalog/pg_am.h
+++ b/src/include/catalog/pg_am.h
@@ -19,7 +19,7 @@
#define PG_AM_H
#include "catalog/genbki.h"
-#include "catalog/pg_am_d.h"
+#include "catalog/pg_am_d.h" /* IWYU pragma: export */
/* ----------------
* pg_am definition. cpp turns this into
diff --git a/src/include/catalog/pg_amop.h b/src/include/catalog/pg_amop.h
index 570100fad41..17a67d54896 100644
--- a/src/include/catalog/pg_amop.h
+++ b/src/include/catalog/pg_amop.h
@@ -44,7 +44,7 @@
#define PG_AMOP_H
#include "catalog/genbki.h"
-#include "catalog/pg_amop_d.h"
+#include "catalog/pg_amop_d.h" /* IWYU pragma: export */
/* ----------------
* pg_amop definition. cpp turns this into
diff --git a/src/include/catalog/pg_amproc.h b/src/include/catalog/pg_amproc.h
index 1dbebeca175..04f05efc8e1 100644
--- a/src/include/catalog/pg_amproc.h
+++ b/src/include/catalog/pg_amproc.h
@@ -33,7 +33,7 @@
#define PG_AMPROC_H
#include "catalog/genbki.h"
-#include "catalog/pg_amproc_d.h"
+#include "catalog/pg_amproc_d.h" /* IWYU pragma: export */
/* ----------------
* pg_amproc definition. cpp turns this into
diff --git a/src/include/catalog/pg_attrdef.h b/src/include/catalog/pg_attrdef.h
index 14f034a3b52..dd8544ae0bd 100644
--- a/src/include/catalog/pg_attrdef.h
+++ b/src/include/catalog/pg_attrdef.h
@@ -20,7 +20,7 @@
#include "catalog/genbki.h"
#include "catalog/objectaddress.h"
-#include "catalog/pg_attrdef_d.h"
+#include "catalog/pg_attrdef_d.h" /* IWYU pragma: export */
/* ----------------
* pg_attrdef definition. cpp turns this into
diff --git a/src/include/catalog/pg_attribute.h
b/src/include/catalog/pg_attribute.h
index 1c62b8bfcb5..20e54ae551b 100644
--- a/src/include/catalog/pg_attribute.h
+++ b/src/include/catalog/pg_attribute.h
@@ -23,7 +23,7 @@
#define PG_ATTRIBUTE_H
#include "catalog/genbki.h"
-#include "catalog/pg_attribute_d.h"
+#include "catalog/pg_attribute_d.h" /* IWYU pragma: export */
/* ----------------
* pg_attribute definition. cpp turns this into
diff --git a/src/include/catalog/pg_auth_members.h
b/src/include/catalog/pg_auth_members.h
index 5f4b30756ca..d0c345780d1 100644
--- a/src/include/catalog/pg_auth_members.h
+++ b/src/include/catalog/pg_auth_members.h
@@ -20,7 +20,7 @@
#define PG_AUTH_MEMBERS_H
#include "catalog/genbki.h"
-#include "catalog/pg_auth_members_d.h"
+#include "catalog/pg_auth_members_d.h" /* IWYU pragma: export */
/* ----------------
* pg_auth_members definition. cpp turns this into
diff --git a/src/include/catalog/pg_authid.h b/src/include/catalog/pg_authid.h
index b0dbdf2dd2e..8e77ae6daa8 100644
--- a/src/include/catalog/pg_authid.h
+++ b/src/include/catalog/pg_authid.h
@@ -21,7 +21,7 @@
#define PG_AUTHID_H
#include "catalog/genbki.h"
-#include "catalog/pg_authid_d.h"
+#include "catalog/pg_authid_d.h" /* IWYU pragma: export */
/* ----------------
* pg_authid definition. cpp turns this into
diff --git a/src/include/catalog/pg_cast.h b/src/include/catalog/pg_cast.h
index 6c995509bc3..d7d72e04fb0 100644
--- a/src/include/catalog/pg_cast.h
+++ b/src/include/catalog/pg_cast.h
@@ -22,7 +22,7 @@
#include "catalog/dependency.h"
#include "catalog/genbki.h"
-#include "catalog/pg_cast_d.h"
+#include "catalog/pg_cast_d.h" /* IWYU pragma: export */
/* ----------------
* pg_cast definition. cpp turns this into
diff --git a/src/include/catalog/pg_class.h b/src/include/catalog/pg_class.h
index 0fc2c093b0d..bcb4b3e50a4 100644
--- a/src/include/catalog/pg_class.h
+++ b/src/include/catalog/pg_class.h
@@ -19,7 +19,7 @@
#define PG_CLASS_H
#include "catalog/genbki.h"
-#include "catalog/pg_class_d.h"
+#include "catalog/pg_class_d.h" /* IWYU pragma: export */
/* ----------------
* pg_class definition. cpp turns this into
diff --git a/src/include/catalog/pg_collation.h
b/src/include/catalog/pg_collation.h
index 5ce289d74bd..50cdeebfe83 100644
--- a/src/include/catalog/pg_collation.h
+++ b/src/include/catalog/pg_collation.h
@@ -19,7 +19,7 @@
#define PG_COLLATION_H
#include "catalog/genbki.h"
-#include "catalog/pg_collation_d.h"
+#include "catalog/pg_collation_d.h" /* IWYU pragma: export */
/* ----------------
* pg_collation definition. cpp turns this into
diff --git a/src/include/catalog/pg_constraint.h
b/src/include/catalog/pg_constraint.h
index 4b4476738a2..c5c60f644e4 100644
--- a/src/include/catalog/pg_constraint.h
+++ b/src/include/catalog/pg_constraint.h
@@ -20,7 +20,7 @@
#include "catalog/dependency.h"
#include "catalog/genbki.h"
-#include "catalog/pg_constraint_d.h"
+#include "catalog/pg_constraint_d.h" /* IWYU pragma: export */
#include "nodes/pg_list.h"
/* ----------------
diff --git a/src/include/catalog/pg_conversion.h
b/src/include/catalog/pg_conversion.h
index d94f0229672..db3c6b9f536 100644
--- a/src/include/catalog/pg_conversion.h
+++ b/src/include/catalog/pg_conversion.h
@@ -19,7 +19,7 @@
#include "catalog/genbki.h"
#include "catalog/objectaddress.h"
-#include "catalog/pg_conversion_d.h"
+#include "catalog/pg_conversion_d.h" /* IWYU pragma: export */
/* ----------------
* pg_conversion definition. cpp turns this into
diff --git a/src/include/catalog/pg_database.h
b/src/include/catalog/pg_database.h
index dbd4379ffa5..4454f92eea0 100644
--- a/src/include/catalog/pg_database.h
+++ b/src/include/catalog/pg_database.h
@@ -19,7 +19,7 @@
#define PG_DATABASE_H
#include "catalog/genbki.h"
-#include "catalog/pg_database_d.h"
+#include "catalog/pg_database_d.h" /* IWYU pragma: export */
/* ----------------
* pg_database definition. cpp turns this into
diff --git a/src/include/catalog/pg_db_role_setting.h
b/src/include/catalog/pg_db_role_setting.h
index 7e1a652381f..45ebb009151 100644
--- a/src/include/catalog/pg_db_role_setting.h
+++ b/src/include/catalog/pg_db_role_setting.h
@@ -20,7 +20,7 @@
#define PG_DB_ROLE_SETTING_H
#include "catalog/genbki.h"
-#include "catalog/pg_db_role_setting_d.h"
+#include "catalog/pg_db_role_setting_d.h" /* IWYU pragma: export */
#include "utils/guc.h"
#include "utils/relcache.h"
diff --git a/src/include/catalog/pg_default_acl.h
b/src/include/catalog/pg_default_acl.h
index d272cdf08b4..f9aee902c34 100644
--- a/src/include/catalog/pg_default_acl.h
+++ b/src/include/catalog/pg_default_acl.h
@@ -20,7 +20,7 @@
#define PG_DEFAULT_ACL_H
#include "catalog/genbki.h"
-#include "catalog/pg_default_acl_d.h"
+#include "catalog/pg_default_acl_d.h" /* IWYU pragma: export */
/* ----------------
* pg_default_acl definition. cpp turns this into
diff --git a/src/include/catalog/pg_depend.h b/src/include/catalog/pg_depend.h
index eb1ee43b012..8b5064831e0 100644
--- a/src/include/catalog/pg_depend.h
+++ b/src/include/catalog/pg_depend.h
@@ -32,7 +32,7 @@
#define PG_DEPEND_H
#include "catalog/genbki.h"
-#include "catalog/pg_depend_d.h"
+#include "catalog/pg_depend_d.h" /* IWYU pragma: export */
/* ----------------
* pg_depend definition. cpp turns this into
diff --git a/src/include/catalog/pg_description.h
b/src/include/catalog/pg_description.h
index e30a6976beb..c523a6d3b53 100644
--- a/src/include/catalog/pg_description.h
+++ b/src/include/catalog/pg_description.h
@@ -38,7 +38,7 @@
#define PG_DESCRIPTION_H
#include "catalog/genbki.h"
-#include "catalog/pg_description_d.h"
+#include "catalog/pg_description_d.h" /* IWYU pragma: export */
/* ----------------
* pg_description definition. cpp turns this into
diff --git a/src/include/catalog/pg_enum.h b/src/include/catalog/pg_enum.h
index 4d9a241d348..d88cb2e4f98 100644
--- a/src/include/catalog/pg_enum.h
+++ b/src/include/catalog/pg_enum.h
@@ -19,7 +19,7 @@
#define PG_ENUM_H
#include "catalog/genbki.h"
-#include "catalog/pg_enum_d.h"
+#include "catalog/pg_enum_d.h" /* IWYU pragma: export */
#include "nodes/pg_list.h"
diff --git a/src/include/catalog/pg_event_trigger.h
b/src/include/catalog/pg_event_trigger.h
index 9170a4ddfe8..2909f9519a6 100644
--- a/src/include/catalog/pg_event_trigger.h
+++ b/src/include/catalog/pg_event_trigger.h
@@ -19,7 +19,7 @@
#define PG_EVENT_TRIGGER_H
#include "catalog/genbki.h"
-#include "catalog/pg_event_trigger_d.h"
+#include "catalog/pg_event_trigger_d.h" /* IWYU pragma: export */
/* ----------------
* pg_event_trigger definition. cpp turns this into
diff --git a/src/include/catalog/pg_extension.h
b/src/include/catalog/pg_extension.h
index 673181b39ae..f14452df59b 100644
--- a/src/include/catalog/pg_extension.h
+++ b/src/include/catalog/pg_extension.h
@@ -19,7 +19,7 @@
#define PG_EXTENSION_H
#include "catalog/genbki.h"
-#include "catalog/pg_extension_d.h"
+#include "catalog/pg_extension_d.h" /* IWYU pragma: export */
/* ----------------
* pg_extension definition. cpp turns this into
diff --git a/src/include/catalog/pg_foreign_data_wrapper.h
b/src/include/catalog/pg_foreign_data_wrapper.h
index 0d8759d3fd3..91fe201a4b2 100644
--- a/src/include/catalog/pg_foreign_data_wrapper.h
+++ b/src/include/catalog/pg_foreign_data_wrapper.h
@@ -19,7 +19,7 @@
#define PG_FOREIGN_DATA_WRAPPER_H
#include "catalog/genbki.h"
-#include "catalog/pg_foreign_data_wrapper_d.h"
+#include "catalog/pg_foreign_data_wrapper_d.h" /* IWYU pragma: export */
/* ----------------
* pg_foreign_data_wrapper definition. cpp turns this into
diff --git a/src/include/catalog/pg_foreign_server.h
b/src/include/catalog/pg_foreign_server.h
index a4b81936b09..fcffd8cfb98 100644
--- a/src/include/catalog/pg_foreign_server.h
+++ b/src/include/catalog/pg_foreign_server.h
@@ -18,7 +18,7 @@
#define PG_FOREIGN_SERVER_H
#include "catalog/genbki.h"
-#include "catalog/pg_foreign_server_d.h"
+#include "catalog/pg_foreign_server_d.h" /* IWYU pragma: export */
/* ----------------
* pg_foreign_server definition. cpp turns this into
diff --git a/src/include/catalog/pg_foreign_table.h
b/src/include/catalog/pg_foreign_table.h
index d17ff0e76e1..3b8f0fe2db2 100644
--- a/src/include/catalog/pg_foreign_table.h
+++ b/src/include/catalog/pg_foreign_table.h
@@ -18,7 +18,7 @@
#define PG_FOREIGN_TABLE_H
#include "catalog/genbki.h"
-#include "catalog/pg_foreign_table_d.h"
+#include "catalog/pg_foreign_table_d.h" /* IWYU pragma: export */
/* ----------------
* pg_foreign_table definition. cpp turns this into
diff --git a/src/include/catalog/pg_index.h b/src/include/catalog/pg_index.h
index 6c89639a9e4..73fb53b9f3e 100644
--- a/src/include/catalog/pg_index.h
+++ b/src/include/catalog/pg_index.h
@@ -19,7 +19,7 @@
#define PG_INDEX_H
#include "catalog/genbki.h"
-#include "catalog/pg_index_d.h"
+#include "catalog/pg_index_d.h" /* IWYU pragma: export */
/* ----------------
* pg_index definition. cpp turns this into
diff --git a/src/include/catalog/pg_inherits.h
b/src/include/catalog/pg_inherits.h
index b3da78c24bd..479ce03ea42 100644
--- a/src/include/catalog/pg_inherits.h
+++ b/src/include/catalog/pg_inherits.h
@@ -19,7 +19,7 @@
#define PG_INHERITS_H
#include "catalog/genbki.h"
-#include "catalog/pg_inherits_d.h"
+#include "catalog/pg_inherits_d.h" /* IWYU pragma: export */
#include "nodes/pg_list.h"
#include "storage/lock.h"
diff --git a/src/include/catalog/pg_init_privs.h
b/src/include/catalog/pg_init_privs.h
index ecd5d0812b7..85747d5a9ee 100644
--- a/src/include/catalog/pg_init_privs.h
+++ b/src/include/catalog/pg_init_privs.h
@@ -36,7 +36,7 @@
#define PG_INIT_PRIVS_H
#include "catalog/genbki.h"
-#include "catalog/pg_init_privs_d.h"
+#include "catalog/pg_init_privs_d.h" /* IWYU pragma: export */
/* ----------------
* pg_init_privs definition. cpp turns this into
diff --git a/src/include/catalog/pg_language.h
b/src/include/catalog/pg_language.h
index 7256908a95c..a9aebb41169 100644
--- a/src/include/catalog/pg_language.h
+++ b/src/include/catalog/pg_language.h
@@ -19,7 +19,7 @@
#define PG_LANGUAGE_H
#include "catalog/genbki.h"
-#include "catalog/pg_language_d.h"
+#include "catalog/pg_language_d.h" /* IWYU pragma: export */
/* ----------------
* pg_language definition. cpp turns this into
diff --git a/src/include/catalog/pg_largeobject.h
b/src/include/catalog/pg_largeobject.h
index e684c58ca95..53509529242 100644
--- a/src/include/catalog/pg_largeobject.h
+++ b/src/include/catalog/pg_largeobject.h
@@ -19,7 +19,7 @@
#define PG_LARGEOBJECT_H
#include "catalog/genbki.h"
-#include "catalog/pg_largeobject_d.h"
+#include "catalog/pg_largeobject_d.h" /* IWYU pragma: export */
#include "utils/snapshot.h"
/* ----------------
diff --git a/src/include/catalog/pg_largeobject_metadata.h
b/src/include/catalog/pg_largeobject_metadata.h
index 8a827442187..9cae8089385 100644
--- a/src/include/catalog/pg_largeobject_metadata.h
+++ b/src/include/catalog/pg_largeobject_metadata.h
@@ -20,7 +20,7 @@
#define PG_LARGEOBJECT_METADATA_H
#include "catalog/genbki.h"
-#include "catalog/pg_largeobject_metadata_d.h"
+#include "catalog/pg_largeobject_metadata_d.h" /* IWYU pragma: export */
/* ----------------
* pg_largeobject_metadata definition. cpp turns this into
diff --git a/src/include/catalog/pg_namespace.h
b/src/include/catalog/pg_namespace.h
index e101808ae1e..316a950f61d 100644
--- a/src/include/catalog/pg_namespace.h
+++ b/src/include/catalog/pg_namespace.h
@@ -19,7 +19,7 @@
#define PG_NAMESPACE_H
#include "catalog/genbki.h"
-#include "catalog/pg_namespace_d.h"
+#include "catalog/pg_namespace_d.h" /* IWYU pragma: export */
#include "utils/acl.h"
/* ----------------------------------------------------------------
diff --git a/src/include/catalog/pg_opclass.h b/src/include/catalog/pg_opclass.h
index 05867d08f93..c99b29a1bd8 100644
--- a/src/include/catalog/pg_opclass.h
+++ b/src/include/catalog/pg_opclass.h
@@ -39,7 +39,7 @@
#define PG_OPCLASS_H
#include "catalog/genbki.h"
-#include "catalog/pg_opclass_d.h"
+#include "catalog/pg_opclass_d.h" /* IWYU pragma: export */
/* ----------------
* pg_opclass definition. cpp turns this into
diff --git a/src/include/catalog/pg_operator.h
b/src/include/catalog/pg_operator.h
index 3ff1acc37ef..a77ee9e805d 100644
--- a/src/include/catalog/pg_operator.h
+++ b/src/include/catalog/pg_operator.h
@@ -20,7 +20,7 @@
#include "catalog/genbki.h"
#include "catalog/objectaddress.h"
-#include "catalog/pg_operator_d.h"
+#include "catalog/pg_operator_d.h" /* IWYU pragma: export */
#include "nodes/pg_list.h"
/* ----------------
diff --git a/src/include/catalog/pg_opfamily.h
b/src/include/catalog/pg_opfamily.h
index 52f9c4acf97..9ebb9c2efec 100644
--- a/src/include/catalog/pg_opfamily.h
+++ b/src/include/catalog/pg_opfamily.h
@@ -19,7 +19,7 @@
#define PG_OPFAMILY_H
#include "catalog/genbki.h"
-#include "catalog/pg_opfamily_d.h"
+#include "catalog/pg_opfamily_d.h" /* IWYU pragma: export */
/* ----------------
* pg_opfamily definition. cpp turns this into
diff --git a/src/include/catalog/pg_parameter_acl.h
b/src/include/catalog/pg_parameter_acl.h
index 8f6b6f92b3e..4818e66fa9f 100644
--- a/src/include/catalog/pg_parameter_acl.h
+++ b/src/include/catalog/pg_parameter_acl.h
@@ -20,7 +20,7 @@
#define PG_PARAMETER_ACL_H
#include "catalog/genbki.h"
-#include "catalog/pg_parameter_acl_d.h"
+#include "catalog/pg_parameter_acl_d.h" /* IWYU pragma: export */
/* ----------------
* pg_parameter_acl definition. cpp turns this into
diff --git a/src/include/catalog/pg_partitioned_table.h
b/src/include/catalog/pg_partitioned_table.h
index daf57008b69..0654596b28f 100644
--- a/src/include/catalog/pg_partitioned_table.h
+++ b/src/include/catalog/pg_partitioned_table.h
@@ -20,7 +20,7 @@
#define PG_PARTITIONED_TABLE_H
#include "catalog/genbki.h"
-#include "catalog/pg_partitioned_table_d.h"
+#include "catalog/pg_partitioned_table_d.h" /* IWYU pragma: export */
/* ----------------
* pg_partitioned_table definition. cpp turns this into
diff --git a/src/include/catalog/pg_policy.h b/src/include/catalog/pg_policy.h
index 05d6398f7b8..3ed94f3cea5 100644
--- a/src/include/catalog/pg_policy.h
+++ b/src/include/catalog/pg_policy.h
@@ -19,7 +19,7 @@
#define PG_POLICY_H
#include "catalog/genbki.h"
-#include "catalog/pg_policy_d.h"
+#include "catalog/pg_policy_d.h" /* IWYU pragma: export */
/* ----------------
* pg_policy definition. cpp turns this into
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index 51f43092415..23cb114700e 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -19,7 +19,7 @@
#include "catalog/genbki.h"
#include "catalog/objectaddress.h"
-#include "catalog/pg_proc_d.h"
+#include "catalog/pg_proc_d.h" /* IWYU pragma: export */
#include "nodes/pg_list.h"
/* ----------------
diff --git a/src/include/catalog/pg_publication.h
b/src/include/catalog/pg_publication.h
index e2d894a2ff5..709c8c18ae6 100644
--- a/src/include/catalog/pg_publication.h
+++ b/src/include/catalog/pg_publication.h
@@ -19,7 +19,7 @@
#include "catalog/genbki.h"
#include "catalog/objectaddress.h"
-#include "catalog/pg_publication_d.h"
+#include "catalog/pg_publication_d.h" /* IWYU pragma: export */
/* ----------------
* pg_publication definition. cpp turns this into
diff --git a/src/include/catalog/pg_publication_namespace.h
b/src/include/catalog/pg_publication_namespace.h
index 1cfb557684f..0b1ba009688 100644
--- a/src/include/catalog/pg_publication_namespace.h
+++ b/src/include/catalog/pg_publication_namespace.h
@@ -19,7 +19,7 @@
#define PG_PUBLICATION_NAMESPACE_H
#include "catalog/genbki.h"
-#include "catalog/pg_publication_namespace_d.h"
+#include "catalog/pg_publication_namespace_d.h" /* IWYU pragma: export */
/* ----------------
diff --git a/src/include/catalog/pg_publication_rel.h
b/src/include/catalog/pg_publication_rel.h
index 25fa630675a..443ce637656 100644
--- a/src/include/catalog/pg_publication_rel.h
+++ b/src/include/catalog/pg_publication_rel.h
@@ -19,7 +19,7 @@
#define PG_PUBLICATION_REL_H
#include "catalog/genbki.h"
-#include "catalog/pg_publication_rel_d.h"
+#include "catalog/pg_publication_rel_d.h" /* IWYU pragma: export */
/* ----------------
* pg_publication_rel definition. cpp turns this into
diff --git a/src/include/catalog/pg_range.h b/src/include/catalog/pg_range.h
index 0bd3ab688bd..5f8c1a0621f 100644
--- a/src/include/catalog/pg_range.h
+++ b/src/include/catalog/pg_range.h
@@ -19,7 +19,7 @@
#define PG_RANGE_H
#include "catalog/genbki.h"
-#include "catalog/pg_range_d.h"
+#include "catalog/pg_range_d.h" /* IWYU pragma: export */
/* ----------------
* pg_range definition. cpp turns this into
diff --git a/src/include/catalog/pg_replication_origin.h
b/src/include/catalog/pg_replication_origin.h
index e9bc0209c26..ed0051d7f0b 100644
--- a/src/include/catalog/pg_replication_origin.h
+++ b/src/include/catalog/pg_replication_origin.h
@@ -20,7 +20,7 @@
#include "access/xlogdefs.h"
#include "catalog/genbki.h"
-#include "catalog/pg_replication_origin_d.h"
+#include "catalog/pg_replication_origin_d.h" /* IWYU pragma: export */
/* ----------------
* pg_replication_origin. cpp turns this into
diff --git a/src/include/catalog/pg_rewrite.h b/src/include/catalog/pg_rewrite.h
index e42ff73d29c..cb1cafc1851 100644
--- a/src/include/catalog/pg_rewrite.h
+++ b/src/include/catalog/pg_rewrite.h
@@ -22,7 +22,7 @@
#define PG_REWRITE_H
#include "catalog/genbki.h"
-#include "catalog/pg_rewrite_d.h"
+#include "catalog/pg_rewrite_d.h" /* IWYU pragma: export */
/* ----------------
* pg_rewrite definition. cpp turns this into
diff --git a/src/include/catalog/pg_seclabel.h
b/src/include/catalog/pg_seclabel.h
index 5f6f5c9c059..0bde07fc1ac 100644
--- a/src/include/catalog/pg_seclabel.h
+++ b/src/include/catalog/pg_seclabel.h
@@ -18,7 +18,7 @@
#define PG_SECLABEL_H
#include "catalog/genbki.h"
-#include "catalog/pg_seclabel_d.h"
+#include "catalog/pg_seclabel_d.h" /* IWYU pragma: export */
/* ----------------
* pg_seclabel definition. cpp turns this into
diff --git a/src/include/catalog/pg_sequence.h
b/src/include/catalog/pg_sequence.h
index 8c3f0dd1ab8..aa1aed07cf4 100644
--- a/src/include/catalog/pg_sequence.h
+++ b/src/include/catalog/pg_sequence.h
@@ -18,7 +18,7 @@
#define PG_SEQUENCE_H
#include "catalog/genbki.h"
-#include "catalog/pg_sequence_d.h"
+#include "catalog/pg_sequence_d.h" /* IWYU pragma: export */
CATALOG(pg_sequence,2224,SequenceRelationId)
{
diff --git a/src/include/catalog/pg_shdepend.h
b/src/include/catalog/pg_shdepend.h
index 7bd48ab97cb..e310cb46774 100644
--- a/src/include/catalog/pg_shdepend.h
+++ b/src/include/catalog/pg_shdepend.h
@@ -28,7 +28,7 @@
#define PG_SHDEPEND_H
#include "catalog/genbki.h"
-#include "catalog/pg_shdepend_d.h"
+#include "catalog/pg_shdepend_d.h" /* IWYU pragma: export */
/* ----------------
* pg_shdepend definition. cpp turns this into
diff --git a/src/include/catalog/pg_shdescription.h
b/src/include/catalog/pg_shdescription.h
index c9433d229ef..7666d08c1c3 100644
--- a/src/include/catalog/pg_shdescription.h
+++ b/src/include/catalog/pg_shdescription.h
@@ -31,7 +31,7 @@
#define PG_SHDESCRIPTION_H
#include "catalog/genbki.h"
-#include "catalog/pg_shdescription_d.h"
+#include "catalog/pg_shdescription_d.h" /* IWYU pragma: export */
/* ----------------
* pg_shdescription definition. cpp turns this into
diff --git a/src/include/catalog/pg_shseclabel.h
b/src/include/catalog/pg_shseclabel.h
index 478d46969c0..68c6456e88c 100644
--- a/src/include/catalog/pg_shseclabel.h
+++ b/src/include/catalog/pg_shseclabel.h
@@ -18,7 +18,7 @@
#define PG_SHSECLABEL_H
#include "catalog/genbki.h"
-#include "catalog/pg_shseclabel_d.h"
+#include "catalog/pg_shseclabel_d.h" /* IWYU pragma: export */
/* ----------------
* pg_shseclabel definition. cpp turns this into
diff --git a/src/include/catalog/pg_statistic.h
b/src/include/catalog/pg_statistic.h
index 041e626390a..2222f96b77b 100644
--- a/src/include/catalog/pg_statistic.h
+++ b/src/include/catalog/pg_statistic.h
@@ -19,7 +19,7 @@
#define PG_STATISTIC_H
#include "catalog/genbki.h"
-#include "catalog/pg_statistic_d.h"
+#include "catalog/pg_statistic_d.h" /* IWYU pragma: export */
/* ----------------
* pg_statistic definition. cpp turns this into
diff --git a/src/include/catalog/pg_statistic_ext.h
b/src/include/catalog/pg_statistic_ext.h
index 50a5c021edf..e15372c728a 100644
--- a/src/include/catalog/pg_statistic_ext.h
+++ b/src/include/catalog/pg_statistic_ext.h
@@ -23,7 +23,7 @@
#define PG_STATISTIC_EXT_H
#include "catalog/genbki.h"
-#include "catalog/pg_statistic_ext_d.h"
+#include "catalog/pg_statistic_ext_d.h" /* IWYU pragma: export */
/* ----------------
* pg_statistic_ext definition. cpp turns this into
diff --git a/src/include/catalog/pg_statistic_ext_data.h
b/src/include/catalog/pg_statistic_ext_data.h
index 18b00ce8b52..67914123292 100644
--- a/src/include/catalog/pg_statistic_ext_data.h
+++ b/src/include/catalog/pg_statistic_ext_data.h
@@ -21,7 +21,7 @@
#define PG_STATISTIC_EXT_DATA_H
#include "catalog/genbki.h"
-#include "catalog/pg_statistic_ext_data_d.h"
+#include "catalog/pg_statistic_ext_data_d.h" /* IWYU pragma: export */
/* ----------------
* pg_statistic_ext_data definition. cpp turns this into
diff --git a/src/include/catalog/pg_subscription.h
b/src/include/catalog/pg_subscription.h
index beaff6578a6..86bcfcf43fc 100644
--- a/src/include/catalog/pg_subscription.h
+++ b/src/include/catalog/pg_subscription.h
@@ -19,7 +19,7 @@
#include "access/xlogdefs.h"
#include "catalog/genbki.h"
-#include "catalog/pg_subscription_d.h"
+#include "catalog/pg_subscription_d.h" /* IWYU pragma: export */
#include "lib/stringinfo.h"
#include "nodes/pg_list.h"
diff --git a/src/include/catalog/pg_subscription_rel.h
b/src/include/catalog/pg_subscription_rel.h
index 8244ad537ae..6290f5f440d 100644
--- a/src/include/catalog/pg_subscription_rel.h
+++ b/src/include/catalog/pg_subscription_rel.h
@@ -20,7 +20,7 @@
#include "access/xlogdefs.h"
#include "catalog/genbki.h"
-#include "catalog/pg_subscription_rel_d.h"
+#include "catalog/pg_subscription_rel_d.h" /* IWYU pragma: export */
#include "nodes/pg_list.h"
/* ----------------
diff --git a/src/include/catalog/pg_tablespace.h
b/src/include/catalog/pg_tablespace.h
index 6b9bdcf8b05..fc624132f10 100644
--- a/src/include/catalog/pg_tablespace.h
+++ b/src/include/catalog/pg_tablespace.h
@@ -19,7 +19,7 @@
#define PG_TABLESPACE_H
#include "catalog/genbki.h"
-#include "catalog/pg_tablespace_d.h"
+#include "catalog/pg_tablespace_d.h" /* IWYU pragma: export */
/* ----------------
* pg_tablespace definition. cpp turns this into
diff --git a/src/include/catalog/pg_transform.h
b/src/include/catalog/pg_transform.h
index 3b69960af60..e85a0beb7a3 100644
--- a/src/include/catalog/pg_transform.h
+++ b/src/include/catalog/pg_transform.h
@@ -19,7 +19,7 @@
#define PG_TRANSFORM_H
#include "catalog/genbki.h"
-#include "catalog/pg_transform_d.h"
+#include "catalog/pg_transform_d.h" /* IWYU pragma: export */
/* ----------------
* pg_transform definition. cpp turns this into
diff --git a/src/include/catalog/pg_trigger.h b/src/include/catalog/pg_trigger.h
index 7fdff161184..418f0d44df4 100644
--- a/src/include/catalog/pg_trigger.h
+++ b/src/include/catalog/pg_trigger.h
@@ -19,7 +19,7 @@
#define PG_TRIGGER_H
#include "catalog/genbki.h"
-#include "catalog/pg_trigger_d.h"
+#include "catalog/pg_trigger_d.h" /* IWYU pragma: export */
/* ----------------
* pg_trigger definition. cpp turns this into
diff --git a/src/include/catalog/pg_ts_config.h
b/src/include/catalog/pg_ts_config.h
index fc0bf447b1d..6983f976764 100644
--- a/src/include/catalog/pg_ts_config.h
+++ b/src/include/catalog/pg_ts_config.h
@@ -20,7 +20,7 @@
#define PG_TS_CONFIG_H
#include "catalog/genbki.h"
-#include "catalog/pg_ts_config_d.h"
+#include "catalog/pg_ts_config_d.h" /* IWYU pragma: export */
/* ----------------
* pg_ts_config definition. cpp turns this into
diff --git a/src/include/catalog/pg_ts_dict.h b/src/include/catalog/pg_ts_dict.h
index 1320468de0e..88dee457d21 100644
--- a/src/include/catalog/pg_ts_dict.h
+++ b/src/include/catalog/pg_ts_dict.h
@@ -19,7 +19,7 @@
#define PG_TS_DICT_H
#include "catalog/genbki.h"
-#include "catalog/pg_ts_dict_d.h"
+#include "catalog/pg_ts_dict_d.h" /* IWYU pragma: export */
/* ----------------
* pg_ts_dict definition. cpp turns this into
diff --git a/src/include/catalog/pg_ts_parser.h
b/src/include/catalog/pg_ts_parser.h
index 909644c96f2..9a9e2bff7bd 100644
--- a/src/include/catalog/pg_ts_parser.h
+++ b/src/include/catalog/pg_ts_parser.h
@@ -19,7 +19,7 @@
#define PG_TS_PARSER_H
#include "catalog/genbki.h"
-#include "catalog/pg_ts_parser_d.h"
+#include "catalog/pg_ts_parser_d.h" /* IWYU pragma: export */
/* ----------------
* pg_ts_parser definition. cpp turns this into
diff --git a/src/include/catalog/pg_ts_template.h
b/src/include/catalog/pg_ts_template.h
index 0562a4a7583..9f155de7c94 100644
--- a/src/include/catalog/pg_ts_template.h
+++ b/src/include/catalog/pg_ts_template.h
@@ -19,7 +19,7 @@
#define PG_TS_TEMPLATE_H
#include "catalog/genbki.h"
-#include "catalog/pg_ts_template_d.h"
+#include "catalog/pg_ts_template_d.h" /* IWYU pragma: export */
/* ----------------
* pg_ts_template definition. cpp turns this into
diff --git a/src/include/catalog/pg_type.h b/src/include/catalog/pg_type.h
index e9259697321..c33c03873d4 100644
--- a/src/include/catalog/pg_type.h
+++ b/src/include/catalog/pg_type.h
@@ -20,7 +20,7 @@
#include "catalog/genbki.h"
#include "catalog/objectaddress.h"
-#include "catalog/pg_type_d.h"
+#include "catalog/pg_type_d.h" /* IWYU pragma: export */
#include "nodes/nodes.h"
/* ----------------
diff --git a/src/include/catalog/pg_user_mapping.h
b/src/include/catalog/pg_user_mapping.h
index 3632448cce0..21c5c1c201e 100644
--- a/src/include/catalog/pg_user_mapping.h
+++ b/src/include/catalog/pg_user_mapping.h
@@ -18,7 +18,7 @@
#define PG_USER_MAPPING_H
#include "catalog/genbki.h"
-#include "catalog/pg_user_mapping_d.h"
+#include "catalog/pg_user_mapping_d.h" /* IWYU pragma: export */
/* ----------------
* pg_user_mapping definition. cpp turns this into
--
2.47.1