Postgres: ОТКЛЮЧИТЬ ВСЕ ТРИГГЕР и ОБНОВИТЬ КАСКАД - PullRequest
0 голосов
/ 28 марта 2020

Похоже, когда я

ALTER TABLE foo DISABLE TRIGGER ALL;
DELETE FROM foo;

Удаления не каскадируются в другие таблицы с ограничениями

FOREIGN KEY ("fooId") REFERENCES "foo"("id") ON DELETE CASCADE

, но я не могу найти ничего в документации о это. Я также не вижу триггеров, которые я не создал в

SELECT * FROM information_schema.triggers;

Я предполагаю, что ON UPDATE / ON DELETE реализованы внутри как триггеры (которые не видны в pgAdmin)? Кто-нибудь знает, где это задокументировано?

1 Ответ

2 голосов
/ 28 марта 2020

Попробуйте здесь :

DISABLE/ENABLE [ REPLICA | ALWAYS ] TRIGGER
Эти формы настраивают запуск триггера (ов), принадлежащих таблице. Отключенный триггер все еще известен системе, но не выполняется, когда происходит его триггерное событие. Для отложенного триггера состояние разрешения проверяется, когда происходит событие, а не когда функция триггера фактически выполняется. Можно отключить или включить один триггер, заданный именем, или все триггеры в таблице, или только пользовательские триггеры (эта опция исключает внутренне сгенерированные триггеры ограничений, такие как те, которые используются для реализации ограничений внешнего ключа или отложенные ограничения уникальности и исключения) . Отключение или включение внутренне сгенерированных триггеров ограничений требует привилегий суперпользователя; это следует делать с осторожностью, поскольку, конечно, целостность ограничения не может быть гарантирована, если триггеры не выполняются.

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