问题描述
我正在使用Postgresql。我想编写一个查询,该查询返回所有具有外键约束的列名称,以及它们所引用的表的名称。
解决方法
据我所知,information_schema
视图没有为您提供列名,因此您必须使用目录:
SELECT c.conrelid::regclass AS source_table,a.attname AS column_name,k.n AS position,c.confrelid::regclass AS referenced_table
FROM pg_constraint AS c
CROSS JOIN LATERAL unnest(c.conkey) WITH ORDINALITY AS k(attnum,n)
JOIN pg_attribute AS a
ON k.attnum = a.attnum AND c.conrelid = a.attrelid
WHERE c.contype = 'f'
ORDER BY c.conrelid::regclass::text,k.n;
要仅获取特定表的数据,请将以下内容添加到WHERE
条件中:
AND c.conrelid = 'mytable'::regclass