Как обновить таблицу с ON DELETE CASCADE, не сбрасывая и не воссоздавая - PullRequest
0 голосов
/ 09 марта 2010

Во время разработки базы данных PostgreSQL я создавал внешние ключи в каждой таблице. Проблема в том, что я забыл выбрать ON DELETE CASCADE вариант.

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

Кто-нибудь знает какие-нибудь ярлыки?

Ответы [ 2 ]

4 голосов
/ 10 марта 2010

Обновите ограничения непосредственно в pg_constraint.Сначала получите необходимые oid:

SELECT oid,* FROM pg_constraint WHERE contype = 'f';

А затем обновите следующие ограничения:

UPDATE pg_constraint SET confupdtype = 'c' WHERE oid = 'fk oid';

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

1 голос
/ 11 марта 2010

Вы могли бы использовать что-то вроде liquibase (http://www.liquibase.org/), которая дает вам принципиально версионные схемы БД, и тогда было бы действительно просто добавить ограничения.

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

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