Неожиданно сработали триггеры в Postgres

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

Я нахожу это странным. Но я пришел с SQL Server, поэтому здесь, в Postgres, поведение может быть другим.

Мои триггеры - это триггеры на уровне операторов, если это важно.

Может кто-нибудь объяснить, пожалуйста, укажите мне некоторые ссылки?

У меня сейчас нет кода для публикации ... но я думаю, что ситуация будет ясна для некоторых людей с большим опытом работы с Postgres.


person peter.petrov    schedule 02.12.2018    source источник


Ответы (1)


Триггер уровня оператора запускается независимо от количества затронутых записей. Таким образом, даже если дочерних записей не существует, выполняется оператор автоматического удаления (при условии, что ваш FK равен on delete cascade), и запускается триггер.

person Gregor Raýman    schedule 02.12.2018