Search code examples
sqldatabasepostgresqlforeign-keys

PostgreSQL: SQL script to get a list of all tables that have a particular column as foreign key


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.


Solution

  • 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'