Fix findoidjoins to recognize oidvector columns.
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 9 May 2020 20:28:09 +0000 (16:28 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 9 May 2020 20:28:20 +0000 (16:28 -0400)
Somehow we'd never noticed this oversight, even though it means
that such basic columns as pg_proc.proargtypes were not being
validated by the oidjoins test.  Correct the query and update
the test script with the newly-found dependencies.

src/test/regress/expected/oidjoins.out
src/test/regress/sql/oidjoins.sql
src/tools/findoidjoins/README
src/tools/findoidjoins/findoidjoins.c

index 92f9143d06f50aef5769a318f223be27e36da162..4731dacfbf429eb6446c5a34030cbfe460a5ebe1 100644 (file)
@@ -1401,6 +1401,46 @@ WHERE    conexclop != 0 AND
 ------+-----------
 (0 rows)
 
+SELECT ctid, indcollation
+FROM   (SELECT ctid, unnest(indcollation) AS indcollation FROM pg_catalog.pg_index) fk
+WHERE  indcollation != 0 AND
+   NOT EXISTS(SELECT 1 FROM pg_catalog.pg_collation pk WHERE pk.oid = fk.indcollation);
+ ctid | indcollation 
+------+--------------
+(0 rows)
+
+SELECT ctid, indclass
+FROM   (SELECT ctid, unnest(indclass) AS indclass FROM pg_catalog.pg_index) fk
+WHERE  indclass != 0 AND
+   NOT EXISTS(SELECT 1 FROM pg_catalog.pg_opclass pk WHERE pk.oid = fk.indclass);
+ ctid | indclass 
+------+----------
+(0 rows)
+
+SELECT ctid, partclass
+FROM   (SELECT ctid, unnest(partclass) AS partclass FROM pg_catalog.pg_partitioned_table) fk
+WHERE  partclass != 0 AND
+   NOT EXISTS(SELECT 1 FROM pg_catalog.pg_opclass pk WHERE pk.oid = fk.partclass);
+ ctid | partclass 
+------+-----------
+(0 rows)
+
+SELECT ctid, partcollation
+FROM   (SELECT ctid, unnest(partcollation) AS partcollation FROM pg_catalog.pg_partitioned_table) fk
+WHERE  partcollation != 0 AND
+   NOT EXISTS(SELECT 1 FROM pg_catalog.pg_collation pk WHERE pk.oid = fk.partcollation);
+ ctid | partcollation 
+------+---------------
+(0 rows)
+
+SELECT ctid, proargtypes
+FROM   (SELECT ctid, unnest(proargtypes) AS proargtypes FROM pg_catalog.pg_proc) fk
+WHERE  proargtypes != 0 AND
+   NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type pk WHERE pk.oid = fk.proargtypes);
+ ctid | proargtypes 
+------+-------------
+(0 rows)
+
 SELECT ctid, proallargtypes
 FROM   (SELECT ctid, unnest(proallargtypes) AS proallargtypes FROM pg_catalog.pg_proc) fk
 WHERE  proallargtypes != 0 AND
index 8a833a23fda8782089b7d8ebcd830806daa7cc7a..f6d2d3c68c36f70e15cf89b5b607079b2076455b 100644 (file)
@@ -701,6 +701,26 @@ SELECT ctid, conexclop
 FROM   (SELECT ctid, unnest(conexclop) AS conexclop FROM pg_catalog.pg_constraint) fk
 WHERE  conexclop != 0 AND
    NOT EXISTS(SELECT 1 FROM pg_catalog.pg_operator pk WHERE pk.oid = fk.conexclop);
+SELECT ctid, indcollation
+FROM   (SELECT ctid, unnest(indcollation) AS indcollation FROM pg_catalog.pg_index) fk
+WHERE  indcollation != 0 AND
+   NOT EXISTS(SELECT 1 FROM pg_catalog.pg_collation pk WHERE pk.oid = fk.indcollation);
+SELECT ctid, indclass
+FROM   (SELECT ctid, unnest(indclass) AS indclass FROM pg_catalog.pg_index) fk
+WHERE  indclass != 0 AND
+   NOT EXISTS(SELECT 1 FROM pg_catalog.pg_opclass pk WHERE pk.oid = fk.indclass);
+SELECT ctid, partclass
+FROM   (SELECT ctid, unnest(partclass) AS partclass FROM pg_catalog.pg_partitioned_table) fk
+WHERE  partclass != 0 AND
+   NOT EXISTS(SELECT 1 FROM pg_catalog.pg_opclass pk WHERE pk.oid = fk.partclass);
+SELECT ctid, partcollation
+FROM   (SELECT ctid, unnest(partcollation) AS partcollation FROM pg_catalog.pg_partitioned_table) fk
+WHERE  partcollation != 0 AND
+   NOT EXISTS(SELECT 1 FROM pg_catalog.pg_collation pk WHERE pk.oid = fk.partcollation);
+SELECT ctid, proargtypes
+FROM   (SELECT ctid, unnest(proargtypes) AS proargtypes FROM pg_catalog.pg_proc) fk
+WHERE  proargtypes != 0 AND
+   NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type pk WHERE pk.oid = fk.proargtypes);
 SELECT ctid, proallargtypes
 FROM   (SELECT ctid, unnest(proallargtypes) AS proallargtypes FROM pg_catalog.pg_proc) fk
 WHERE  proallargtypes != 0 AND
index a177c10375bc7ba0c4fb1d5361aa8a65eec1d637..d0097101fdb5a7e9586f38367458afbeed52b3c6 100644 (file)
@@ -235,6 +235,11 @@ Join pg_catalog.pg_constraint.conpfeqop []=> pg_catalog.pg_operator.oid
 Join pg_catalog.pg_constraint.conppeqop []=> pg_catalog.pg_operator.oid
 Join pg_catalog.pg_constraint.conffeqop []=> pg_catalog.pg_operator.oid
 Join pg_catalog.pg_constraint.conexclop []=> pg_catalog.pg_operator.oid
+Join pg_catalog.pg_index.indcollation []=> pg_catalog.pg_collation.oid
+Join pg_catalog.pg_index.indclass []=> pg_catalog.pg_opclass.oid
+Join pg_catalog.pg_partitioned_table.partclass []=> pg_catalog.pg_opclass.oid
+Join pg_catalog.pg_partitioned_table.partcollation []=> pg_catalog.pg_collation.oid
+Join pg_catalog.pg_proc.proargtypes []=> pg_catalog.pg_type.oid
 Join pg_catalog.pg_proc.proallargtypes []=> pg_catalog.pg_type.oid
 
 ---------------------------------------------------------------------------
index ade11a53a2cb5381ef653d79b6cc93588e78058a..5239332ea7eefd0e8e7895e2f230ec828de2a1c0 100644 (file)
@@ -59,7 +59,6 @@ main(int argc, char **argv)
    /* Get a list of system relations that have OIDs */
 
    printfPQExpBuffer(&sql,
-                     "SET search_path = public;"
                      "SELECT c.relname, (SELECT nspname FROM "
                      "pg_catalog.pg_namespace n WHERE n.oid = c.relnamespace) AS nspname "
                      "FROM pg_catalog.pg_class c "
@@ -170,6 +169,7 @@ main(int argc, char **argv)
                      " AND c.relkind = " CppAsString2(RELKIND_RELATION)
                      " AND a.attrelid = c.oid"
                      " AND a.atttypid IN ('pg_catalog.oid[]'::regtype, "
+                     " 'pg_catalog.oidvector'::regtype, "
                      " 'pg_catalog.regclass[]'::regtype, "
                      " 'pg_catalog.regoper[]'::regtype, "
                      " 'pg_catalog.regoperator[]'::regtype, "