Postgres ограничивает порядок записи и удаления из таблиц - PullRequest
2 голосов
/ 04 октября 2011

Я работаю в базе данных postgresQL, которая содержит более 200 таблиц, некоторые со многими (более 15) ограничениями, которые являются ссылками на другие таблицы.Мне удалось перечислить все ограничения из таблиц pg_constraints.
Я пытаюсь отобразить зависимости и таблицы, на которые ссылается каждая таблица, чтобы иметь возможность управлять записью в таблицы из веб-приложения.Если таблица имеет зависимость, я должен быть уверен, что зависимые таблицы записаны до этой таблицы, и если на таблицу ссылается другая таблица, что в данной таблице есть необходимые строки перед таблицей, к которой она обращается.Как получить список таблиц в том порядке, в котором они должны быть записаны, и в обратном порядке, в котором необходимо следовать для удаления из нескольких таблиц?

Ответы [ 2 ]

1 голос
/ 06 октября 2011

Вы также можете попытаться изменить ограничения на deferred .

1 голос
/ 04 октября 2011

Два совета:

  • Могут быть циклические зависимости, особенно с триггерами и правилами. В таком случае, как ваш, не исключено. Это вполне приемлемый дизайн, логика программирования в триггерах / правилах / внешних ключах и т. Д. Должна позаботиться о том, чтобы вы не входили в бесконечные циклы. (СУБД может обнаруживать их, когда они случаются.) Но ваше стремление отобразить зависимости на реляционном уровне может привести вас к кругу.

  • pgAdmin (текущая версия 1.14) имеет выделенные вкладки для «Зависимости» и «Зависимые» в главном интерфейсе. Нажмите на любой объект и получите полный список. Это может быть довольно полезно в вашем случае - может быть, все, что вам нужно. Вы также можете включить ведение журнала выписок вашей базы данных и прочитать, как pgAdmin извлекает эту информацию из ваших журналов. Для этого установите log_statement = all.
    Не забудьте сбросить log_statement, иначе ваши лог-файлы станут огромными.

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