获取所有具有外键约束的列名

问题描述

我正在使用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