通过外键获取 table 名称

Get table name by foreign key

我在数据库中有两个 table。第一个 table 有第二个 table 的外键。

我可以通过第一个 table 的外键获取第二个 table 名称吗?

是的,你可以。

SELECT ct.oid, conname, condeferrable, condeferred, confupdtype, confdeltype, confmatchtype, conkey, confkey, confrelid, nl.nspname as fknsp, cl.relname as fktab, nr.nspname as refnsp, cr.relname as reftab, description, convalidated
      FROM pg_constraint ct
      JOIN pg_class cl ON cl.oid=conrelid
      JOIN pg_namespace nl ON nl.oid=cl.relnamespace
      JOIN pg_class cr ON cr.oid=confrelid
      JOIN pg_namespace nr ON nr.oid=cr.relnamespace
      LEFT OUTER JOIN pg_description des ON (des.objoid=ct.oid AND des.classoid='pg_constraint'::regclass)
     WHERE contype='f' AND ct.conname = 'yourfk_name' -- conrelid = 26941::oid
     ORDER BY conname;

只需用您的 foreign_key 名字来评价 yourfk_name。如果愿意,也可以使用 oid。
这适用于 9.3,但我认为也 9.x。

转换为 regclass:

更简单、更快速
SELECT conrelid::regclass::text  AS tbl
     , conname                   AS fk_constraint
     , confrelid::regclass::text AS referenced_tbl
FROM   pg_constraint
WHERE  contype = 'f'
AND    conrelid = 'first_table_name'::regclass  -- table name
-- AND conname = 'fk_name' -- optionally restrict to given FK
ORDER  BY conname;

table 名称不一定是唯一的。架构限定 table 名称或依赖 search_path.

适用于任何 版本的 Postgres 千禧年。