agora inbox for [email protected]  
help / color / mirror / Atom feed
[PATCH v28 04/11] Add Incremental View Maintenance support to pg_dump
122+ messages / 2 participants
[nested] [flat]

* [PATCH v28 04/11] Add Incremental View Maintenance support to pg_dump
@ 2020-11-11 08:01  Yugo Nagata <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Yugo Nagata @ 2020-11-11 08:01 UTC (permalink / raw)

Support CREATE INCREMENTAL MATERIALIZED VIEW syntax.
---
 src/bin/pg_dump/pg_dump.c        | 18 +++++++++++++++---
 src/bin/pg_dump/pg_dump.h        |  1 +
 src/bin/pg_dump/t/002_pg_dump.pl | 15 +++++++++++++++
 3 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 3af97a6039..48f61b1af8 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -6352,6 +6352,7 @@ getTables(Archive *fout, int *numTables)
 	int			i_relacl;
 	int			i_acldefault;
 	int			i_ispartition;
+	int			i_isivm;
 
 	/*
 	 * Find all the tables and table-like objects.
@@ -6454,10 +6455,17 @@ getTables(Archive *fout, int *numTables)
 
 	if (fout->remoteVersion >= 100000)
 		appendPQExpBufferStr(query,
-							 "c.relispartition AS ispartition ");
+							 "c.relispartition AS ispartition, ");
 	else
 		appendPQExpBufferStr(query,
-							 "false AS ispartition ");
+							 "false AS ispartition, ");
+
+	if (fout->remoteVersion >= 170000)
+		appendPQExpBufferStr(query,
+							 "c.relisivm AS isivm ");
+	else
+		appendPQExpBufferStr(query,
+							 "false AS isivm ");
 
 	/*
 	 * Left join to pg_depend to pick up dependency info linking sequences to
@@ -6566,6 +6574,7 @@ getTables(Archive *fout, int *numTables)
 	i_relacl = PQfnumber(res, "relacl");
 	i_acldefault = PQfnumber(res, "acldefault");
 	i_ispartition = PQfnumber(res, "ispartition");
+	i_isivm = PQfnumber(res, "isivm");
 
 	if (dopt->lockWaitTimeout)
 	{
@@ -6645,6 +6654,7 @@ getTables(Archive *fout, int *numTables)
 			tblinfo[i].amname = pg_strdup(PQgetvalue(res, i, i_amname));
 		tblinfo[i].is_identity_sequence = (strcmp(PQgetvalue(res, i, i_is_identity_sequence), "t") == 0);
 		tblinfo[i].ispartition = (strcmp(PQgetvalue(res, i, i_ispartition), "t") == 0);
+		tblinfo[i].isivm = (strcmp(PQgetvalue(res, i, i_isivm), "t") == 0);
 
 		/* other fields were zeroed above */
 
@@ -15517,9 +15527,11 @@ dumpTableSchema(Archive *fout, const TableInfo *tbinfo)
 			binary_upgrade_set_pg_class_oids(fout, q,
 											 tbinfo->dobj.catId.oid, false);
 
-		appendPQExpBuffer(q, "CREATE %s%s %s",
+		appendPQExpBuffer(q, "CREATE %s%s%s %s",
 						  tbinfo->relpersistence == RELPERSISTENCE_UNLOGGED ?
 						  "UNLOGGED " : "",
+						  tbinfo->relkind == RELKIND_MATVIEW && tbinfo->isivm ?
+						  "INCREMENTAL " : "",
 						  reltypename,
 						  qualrelname);
 
diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h
index ed6ce41ad7..119293a751 100644
--- a/src/bin/pg_dump/pg_dump.h
+++ b/src/bin/pg_dump/pg_dump.h
@@ -322,6 +322,7 @@ typedef struct _tableInfo
 
 	int			numParents;		/* number of (immediate) parent tables */
 	struct _tableInfo **parents;	/* TableInfos of immediate parents */
+	bool		isivm;			/* is incrementally maintainable materialized view? */
 
 	/*
 	 * These fields are computed only if we decide the table is interesting
diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl
index 387c5d3afb..164c9eb110 100644
--- a/src/bin/pg_dump/t/002_pg_dump.pl
+++ b/src/bin/pg_dump/t/002_pg_dump.pl
@@ -2732,6 +2732,21 @@ my %tests = (
 		},
 	},
 
+	'CREATE MATERIALIZED VIEW matview_ivm' => {
+		create_order => 21,
+		create_sql   => 'CREATE INCREMENTAL MATERIALIZED VIEW dump_test.matview_ivm (col1) AS
+					   SELECT col1 FROM dump_test.test_table;',
+		regexp => qr/^
+			\QCREATE INCREMENTAL MATERIALIZED VIEW dump_test.matview_ivm AS\E
+			\n\s+\QSELECT test_table.col1\E
+			\n\s+\QFROM dump_test.test_table\E
+			\n\s+\QWITH NO DATA;\E
+			/xm,
+		like =>
+		  { %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
+		unlike => { exclude_dump_test_schema => 1, },
+	},
+
 	'CREATE POLICY p1 ON test_table' => {
 		create_order => 22,
 		create_sql => 'CREATE POLICY p1 ON dump_test.test_table
-- 
2.25.1


--Multipart=_Thu__1_Jun_2023_23_59_09_+0900_/G5+8nG46.f1T42K
Content-Type: text/x-diff;
 name="v28-0005-Add-Incremental-View-Maintenance-support-to-psql.patch"
Content-Disposition: attachment;
 filename="v28-0005-Add-Incremental-View-Maintenance-support-to-psql.patch"
Content-Transfer-Encoding: 7bit



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread

* [PATCH v3 1/7] Track retired system procedures in pg_retired.dat
@ 2026-01-29 23:47  Mark Wong <[email protected]>
  0 siblings, 0 replies; 122+ messages in thread

From: Mark Wong @ 2026-01-29 23:47 UTC (permalink / raw)

System procedures may be removed from time to time.  Keep track of
previously used OIDs to prevent potential conflicts from reusing OIDs
after an upgrade.
---
 src/include/catalog/pg_retired.dat   | 20 ++++++++++++++++++++
 src/include/catalog/renumber_oids.pl |  9 +++++++++
 src/include/catalog/unused_oids      |  7 +++++++
 3 files changed, 36 insertions(+)
 create mode 100644 src/include/catalog/pg_retired.dat

diff --git a/src/include/catalog/pg_retired.dat b/src/include/catalog/pg_retired.dat
new file mode 100644
index 00000000000..413b68ad1cd
--- /dev/null
+++ b/src/include/catalog/pg_retired.dat
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_retired.dat
+#    Entries that have been removed from pg_proc.dat with OIDs that are
+#    are not to be reused.
+#
+# Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_retired.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# What's primarily important here is knowing which OIDs are not to be reused.
+# At the same time, it may be good to be reminded what procedure was associated
+# with it.
+
+]
diff --git a/src/include/catalog/renumber_oids.pl b/src/include/catalog/renumber_oids.pl
index f6e25d0f1e1..7489be02a50 100755
--- a/src/include/catalog/renumber_oids.pl
+++ b/src/include/catalog/renumber_oids.pl
@@ -68,6 +68,15 @@ my $oids = Catalog::FindAllOidsFromHeaders(@header_files);
 my %oidhash;
 @oidhash{@$oids} = undef;
 
+# Also include OIDs listed in pg_retired.dat to prevent new OIDs to be mapped
+# to OIDs that have been retired.
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	$oidhash{ $row->{oid} } = undef
+	  if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Select new OIDs for existing OIDs in the mapped range.
 # We do this first so that we preserve the ordering of the mapped OIDs
 # (for reproducibility's sake), and so that if we fail due to running out
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids
index 147fba5e209..aeb485d9b5e 100755
--- a/src/include/catalog/unused_oids
+++ b/src/include/catalog/unused_oids
@@ -32,6 +32,13 @@ my @input_files = glob("pg_*.h");
 
 my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
 
+# Also exclude OIDs listed in pg_retired.dat
+my $retired_data = Catalog::ParseData('pg_retired.dat', undef, 0);
+foreach my $row (@$retired_data)
+{
+	push @{$oids}, $row->{oid} if ref $row eq 'HASH' && defined $row->{oid};
+}
+
 # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
 my $FirstGenbkiObjectId =
   Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
-- 
2.43.0


--zd8Z8rlPOcTi77n/
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch"



^ permalink  raw  reply  [nested|flat] 122+ messages in thread


end of thread, other threads:[~2026-01-29 23:47 UTC | newest]

Thread overview: 122+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2020-11-11 08:01 [PATCH v28 04/11] Add Incremental View Maintenance support to pg_dump Yugo Nagata <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>
2026-01-29 23:47 [PATCH v3 1/7] Track retired system procedures in pg_retired.dat Mark Wong <[email protected]>

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox