Отслеживание зависимостей в базе данных PostgreSQL - PullRequest
0 голосов
/ 15 марта 2011

В сложной базе данных Postgres отказывается изменять представление, поскольку от него зависит множество правил, а также множество других представлений.

Я могу отбросить представление со всеми его зависимостями с помощью DROP CASCADE, но как я потом воссоздаю эти представления? Это не так просто, потому что даже если я знаю, что V и U зависит от представления, которое я хочу изменить, я не могу просто создать их так, как хочу Если представление V зависит от U, я должен сначала создать V, а затем - U.

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

Ответы [ 2 ]

1 голос
/ 15 марта 2011

Проверьте системную таблицу pg_depend , чтобы получить зависимости.

0 голосов
/ 17 марта 2011

Я не знаю, насколько хорошо это будет работать для вас, но наименее трудоемким способом, вероятно, будет DROP CASCADE и использование apgdiff для воссоздания удаленных представлений:

  1. Запустите pg_dump -s -f old_schema.sql, чтобы создать дамп схемы - который включает в себя все представления и т. Д.
  2. Пробег DROP VIEW x CASCADE
  3. Выполнить pg_dump -s -f new_schema.sql
  4. Выполнить apgdiff new_schema.sql old_schema.sql > restore.sql - создать скрипт для восстановления старой схемы в базе данных.
  5. psql -f restore.sql

К сожалению, это означает, что ваша база данных будет пропускать эти представления в течение некоторого времени, поэтому вам, вероятно, придется отключить ее для обслуживания.

...