sqlpostgresqlforeign-keysdatabase-schema

How to list table foreign keys


Is there a way using SQL to list all foreign keys for a given table? I know the table name / schema and I can plug that in.


Solution

  • You can do this via the information_schema tables. For example:

    SELECT
        tc.table_schema, 
        tc.constraint_name, 
        tc.table_name, 
        kcu.column_name, 
        ccu.table_schema AS foreign_table_schema,
        ccu.table_name AS foreign_table_name,
        ccu.column_name AS foreign_column_name 
    FROM information_schema.table_constraints AS tc 
    JOIN information_schema.key_column_usage AS kcu
        ON tc.constraint_name = kcu.constraint_name
        AND tc.table_schema = kcu.table_schema
    JOIN information_schema.constraint_column_usage AS ccu
        ON ccu.constraint_name = tc.constraint_name
    WHERE tc.constraint_type = 'FOREIGN KEY'
        AND tc.table_schema='myschema'
        AND tc.table_name='mytable';
    

    If you need to go the other way, i.e., find all places a table is used as a foreign table, you can replace the last two conditions with:

        AND ccu.table_schema='myschema'
        AND ccu.table_name='mytable';