如何在PSQL中查找继承自另一个表的子表

23
在PSQL中,有没有一种好的方式可以找到所有从另一个表继承的表?理想情况下,我希望能够从SQL查询中获取数据,但目前,我会满足于任何可靠的方法。
3个回答

45

你说的“from sql query”是什么意思?是指从pg_inherits中进行SELECT不够好吗?

SELECT pg_inherits.*, c.relname AS child, p.relname AS parent
FROM
    pg_inherits JOIN pg_class AS c ON (inhrelid=c.oid)
    JOIN pg_class as p ON (inhparent=p.oid);

当我写“sql查询”时,我的意思是可以传递给PSQL命令行的内容,而不是像\d这样必须交互式运行的内容。因此,从pg_inherits选择是一个很好的开始。我在哪里可以找到一个列出表名和它们的oid的表格? - Watusimoto
这太完美了!非常感谢! - Watusimoto
2
Watusimoto - \d 可以在命令行中传递给 psql :) - user80168
1
\d+ _parentTable_ 将会在命令行控制台中列出所有子表。 - Yzmir Ramirez

11
如果您需要模式名称:
SELECT cn.nspname AS schema_child, c.relname AS child, pn.nspname AS schema_parent, p.relname AS parent
FROM pg_inherits 
JOIN pg_class AS c ON (inhrelid=c.oid)
JOIN pg_class as p ON (inhparent=p.oid)
JOIN pg_namespace pn ON pn.oid = p.relnamespace
JOIN pg_namespace cn ON cn.oid = c.relnamespace
WHERE p.relname = 'your table name' and pn.nspname = 'your schema name'

3
如果您想从主分区中查找所有的子元素,只需执行以下操作即可:

SELECT relname
FROM pg_class,pg_inherits
WHERE pg_class.oid=pg_inherits.inhrelid
AND inhparent
IN (SELECT oid FROM pg_class WHERE relname='your_master_partition')
ORDER BY relname;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接