Postgres: SQL to list table foreign keys
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
AND ccu.table_schema = tc.table_schema
WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name='mytable';
psql does this, and if you start psql with:
psql -E
it will show you exactly what query is executed. In the case of finding foreign keys, it's:
SELECT conname,
pg_catalog.pg_get_constraintdef(r.oid, true) as condef
FROM pg_catalog.pg_constraint r
WHERE r.conrelid = '16485' AND r.contype = 'f' ORDER BY 1
In this case, 16485 is the oid of the table I'm looking at - you can get that one by just casting your tablename to regclass like:
WHERE r.conrelid = 'mytable'::regclass
Schema-qualify the table name if it's not unique (or the first in your search_path
):
WHERE r.conrelid = 'myschema.mytable'::regclass
Issue \d+ tablename
on PostgreSQL prompt, in addition to showing table column's data types it'll show the indexes and foreign keys.