Получение списка таблиц, от которых зависит представление / таблица в PostgreSQL - PullRequest
4 голосов
/ 20 ноября 2010

В PostgreSQL есть ли способ получить все таблицы, от которых зависит представление / таблица, в зависимости от использования внешних ключей и доступа к данной таблице?

По сути, я хочу иметь возможностьскопировать структуру представления / таблицы с помощью сценария и получить возможность автоматически получать список таблиц, которые мне также нужно будет скопировать, чтобы все по-прежнему работало правильно.

ЭтоОтвет , кажется, направлен в правильном направлении, но не дает мне ожидаемых / нужных результатов.Есть предложения?

Ответы [ 4 ]

11 голосов
/ 02 декабря 2010

Используя информацию Энди Лестера, я смог найти следующие запросы для получения необходимой информации.

Получить таблицы, на которые ссылаются внешние ключи:

SELECT cl2.relname AS ref_table
FROM pg_constraint as co
JOIN pg_class AS cl1 ON co.conrelid=cl1.oid
JOIN pg_class AS cl2 ON co.confrelid=cl2.oid
WHERE co.contype='f' AND cl1.relname='TABLENAME'
ORDER BY cl2.relname;

Получить таблицы, к которым относятся таблицы или правила из таблицы:

SELECT cl_d.relname AS ref_table
FROM pg_rewrite AS r
JOIN pg_class AS cl_r ON r.ev_class=cl_r.oid
JOIN pg_depend AS d ON r.oid=d.objid
JOIN pg_class AS cl_d ON d.refobjid=cl_d.oid
WHERE cl_d.relkind IN ('r','v') AND cl_r.relname='TABLENAME'
GROUP BY cl_d.relname
ORDER BY cl_d.relname;
2 голосов
/ 20 ноября 2010

Если у вас правильно настроены внешние ключи, используйте pg_dump, чтобы вывести определения таблиц.

pg_dump -s -t TABLENAME
1 голос
/ 20 ноября 2010

Я думаю, что это довольно плохая идея. Просто скопируйте всю базу данных, я думаю, что приложение хочет иметь все данные, а не только данные из одной таблицы. Более того, существуют также триггеры, которые могут зависеть от некоторых таблиц, но для того, чтобы понять, что вам придется выполнять не очень простой анализ кода.

0 голосов
/ 20 ноября 2010

В psql добавление + к обычному \d дает вам список «Referenced by» вместе с определением таблицы.

\d+ tablename
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...