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描述版本和添加的链接。谢谢