summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2020-05-09 20:28:09 +0000
committerTom Lane2020-05-09 20:28:20 +0000
commit96d175e3e2ea1bbf734f21444126a711da12108b (patch)
tree4a7754e5493dae46fda79106569e53df40e399c2
parentebeb3dea772652887b67a7549906f5a9ec8a487f (diff)
Fix findoidjoins to recognize oidvector columns.
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.
-rw-r--r--src/test/regress/expected/oidjoins.out40
-rw-r--r--src/test/regress/sql/oidjoins.sql20
-rw-r--r--src/tools/findoidjoins/README5
-rw-r--r--src/tools/findoidjoins/findoidjoins.c2
4 files changed, 66 insertions, 1 deletions
diff --git a/src/test/regress/expected/oidjoins.out b/src/test/regress/expected/oidjoins.out
index 92f9143d06f..4731dacfbf4 100644
--- a/src/test/regress/expected/oidjoins.out
+++ b/src/test/regress/expected/oidjoins.out
@@ -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
diff --git a/src/test/regress/sql/oidjoins.sql b/src/test/regress/sql/oidjoins.sql
index 8a833a23fda..f6d2d3c68c3 100644
--- a/src/test/regress/sql/oidjoins.sql
+++ b/src/test/regress/sql/oidjoins.sql
@@ -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
diff --git a/src/tools/findoidjoins/README b/src/tools/findoidjoins/README
index a177c10375b..d0097101fdb 100644
--- a/src/tools/findoidjoins/README
+++ b/src/tools/findoidjoins/README
@@ -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
---------------------------------------------------------------------------
diff --git a/src/tools/findoidjoins/findoidjoins.c b/src/tools/findoidjoins/findoidjoins.c
index ade11a53a2c..5239332ea7e 100644
--- a/src/tools/findoidjoins/findoidjoins.c
+++ b/src/tools/findoidjoins/findoidjoins.c
@@ -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, "