Как найти дочерние таблицы, которые наследуются от другой таблицы в PSQL - PullRequest
19 голосов
/ 22 сентября 2009

В PSQL есть хороший способ найти все таблицы, которые наследуются от другой таблицы? В идеале я мог бы получить данные из SQL-запроса, но на этом этапе я был бы рад любому надежному методу.

Ответы [ 3 ]

33 голосов
/ 22 сентября 2009

Что вы имеете в виду "из SQL-запроса"? Означает ли это, что SELECT с pg_inherits недостаточно для вас?

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);
5 голосов
/ 13 февраля 2015

Если вам также нужны имена схем:

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'
1 голос
/ 31 августа 2016

Если вы хотите найти все дочерние элементы в главном разделе, вы можете просто выполнить его следующим образом:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...