Sql 查找外键约束的引用字段
我有一个表用户,其字段名为Sql 查找外键约束的引用字段,sql,postgresql,foreign-keys,Sql,Postgresql,Foreign Keys,我有一个表用户,其字段名为org\u id,是表organization的外键,主键字段为organization\u id。知道表名(用户)和字段名(users.org\u id),是否有查询可以告诉我org\u id引用的名称和字段 我发现了一个类似的示例,其中提供了一个查询来确定引用的表名,但我还需要知道引用的字段名: SELECT c.confrelid::regclass::text AS referenced_table ,c.conname AS fk_name ,pg_g
org\u id
,是表organization
的外键,主键字段为organization\u id
。知道表名(用户)和字段名(users.org\u id
),是否有查询可以告诉我org\u id
引用的名称和字段
我发现了一个类似的示例,其中提供了一个查询来确定引用的表名,但我还需要知道引用的字段名:
SELECT c.confrelid::regclass::text AS referenced_table
,c.conname AS fk_name
,pg_get_constraintdef(c.oid) AS fk_definition
FROM pg_attribute a
JOIN pg_constraint c ON (c.conrelid, c.conkey[1]) = (a.attrelid, a.attnum)
WHERE a.attrelid = '"Schema"."Users"'::regclass -- table name
AND a.attname = 'org_id' -- column name
AND c.contype = 'f'
ORDER BY conrelid::regclass::text, contype DESC;
因此,上面的查询将返回表的名称(
organization
)、fk名称和fk定义。是否有一种方法也可以获取所引用字段的名称?我知道我可能会执行另一个查询来确定给定表的pk名称,但我希望避免对此执行多个查询。此查询为外键约束添加引用列:
SELECT c.confrelid::regclass::text AS referenced_table
,string_agg(f.attname, ', ') AS referenced_columns
,c.conname AS fk_name
,pg_get_constraintdef(c.oid) AS fk_definition
FROM pg_attribute a
JOIN pg_constraint c ON (c.conrelid, c.conkey[1]) = (a.attrelid, a.attnum)
JOIN pg_attribute f ON f.attrelid = c.confrelid
AND f.attnum = ANY (confkey)
WHERE a.attrelid = '"Schema"."Users"'::regclass -- table name
AND a.attname = 'org_id' -- column name
AND c.contype = 'f'
GROUP BY c.confrelid, c.conname, c.oid;
fk约束可以引用多个列。这就是查询中使用聚合函数的原因。看起来像我的代码。你应该包括。另外,请添加您的PostgresSite描述版本和添加的链接。谢谢