summaryrefslogtreecommitdiffstats
path: root/src/include/catalog/duplicate_oids
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/catalog/duplicate_oids')
-rwxr-xr-xsrc/include/catalog/duplicate_oids49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/include/catalog/duplicate_oids b/src/include/catalog/duplicate_oids
new file mode 100755
index 0000000..9e5e9a1
--- /dev/null
+++ b/src/include/catalog/duplicate_oids
@@ -0,0 +1,49 @@
+#!/usr/bin/perl
+#----------------------------------------------------------------------
+#
+# duplicate_oids
+# Identifies any manually-assigned OIDs that are used multiple times
+# in the Postgres catalog data.
+#
+# While duplicate OIDs would only cause a failure if they appear in
+# the same catalog, our project policy is that manually assigned OIDs
+# should be globally unique, to avoid confusion.
+#
+# Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/duplicate_oids
+#
+#----------------------------------------------------------------------
+
+use strict;
+use warnings;
+
+# Must run in src/include/catalog
+use FindBin;
+chdir $FindBin::RealBin or die "could not cd to $FindBin::RealBin: $!\n";
+
+use lib "$FindBin::RealBin/../../backend/catalog/";
+use Catalog;
+
+my @input_files = (glob("pg_*.h"), qw(indexing.h toasting.h));
+
+my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
+
+my %oidcounts;
+
+foreach my $oid (@{$oids})
+{
+ $oidcounts{$oid}++;
+}
+
+my $found = 0;
+
+foreach my $oid (sort { $a <=> $b } keys %oidcounts)
+{
+ next unless $oidcounts{$oid} > 1;
+ $found = 1;
+ print "$oid\n";
+}
+
+exit $found;