通过外键获取 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 千禧年。
我在数据库中有两个 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 千禧年。