Выполнение ДЛЯ КАЖДОГО триггера ОПЕРАТОРА в контексте транзакции

#sql #postgresql #triggers #transactions

Вопрос:

Я планирую установить триггер на таблицу, которая выполняется после каждого оператора ( foreach -оператор).

Но я не уверен, что именно означает это утверждение. Например, если я сделаю несколько вставок в одной транзакции, например, 1000.

Будет ли триггер затем выполняться один раз в тысячу раз?

Комментарии:

1. Если INSERT добавить 1000 строк, это будет одно утверждение. Если у вас есть 1000 INSERT секунд, это 1000 утверждений.

2. @MatBailie да, я знаю, но я мог себе представить, что правила для транзакций могут быть другими, я был просто любопытен 🙂

3. Представьте себе случай, когда транзакции означали, что он вел себя по-другому. Как триггер узнает, когда нужно бежать? В конце сделки? Теперь логика внутри транзакции не может знать результат триггера. У вас были бы условия гонки и несоответствия повсюду. С точки зрения всех других процессов триггеры являются частью вставки; до тех пор, пока триггеры не завершатся, вставка также не будет выполнена (другие процессы никогда не видят «неполное» состояние). Полезное чтение для объяснения того, почему это актуально, касается конкретно атомарных действий и соответствия ACID базы данных в целом.