I’m using PostgreSQL and I’m trying to list all the tables that have a particular column from a table as a foreign-key/reference. Can this be done? I’m sure this information is stored somewhere in information_schema
but I have no idea how to start querying it.
Advertisement
Answer
SELECT r.table_name FROM information_schema.constraint_column_usage u INNER JOIN information_schema.referential_constraints fk ON u.constraint_catalog = fk.unique_constraint_catalog AND u.constraint_schema = fk.unique_constraint_schema AND u.constraint_name = fk.unique_constraint_name INNER JOIN information_schema.key_column_usage r ON r.constraint_catalog = fk.constraint_catalog AND r.constraint_schema = fk.constraint_schema AND r.constraint_name = fk.constraint_name WHERE u.column_name = 'id' AND u.table_catalog = 'db_name' AND u.table_schema = 'public' AND u.table_name = 'table_a'
This uses the full catalog/schema/name triplet to identify a db table from all 3 information_schema views. You can drop one or two as required.
The query lists all tables that have a foreign key constraint against the column ‘a’ in table ‘d’