#sql #postgresql #triggers #transactions
Вопрос:
Я планирую установить триггер на таблицу, которая выполняется после каждого оператора ( foreach
-оператор).
Но я не уверен, что именно означает это утверждение. Например, если я сделаю несколько вставок в одной транзакции, например, 1000.
Будет ли триггер затем выполняться один раз в тысячу раз?
Комментарии:
1. Если
INSERT
добавить 1000 строк, это будет одно утверждение. Если у вас есть 1000INSERT
секунд, это 1000 утверждений.2. @MatBailie да, я знаю, но я мог себе представить, что правила для транзакций могут быть другими, я был просто любопытен 🙂
3. Представьте себе случай, когда транзакции означали, что он вел себя по-другому. Как триггер узнает, когда нужно бежать? В конце сделки? Теперь логика внутри транзакции не может знать результат триггера. У вас были бы условия гонки и несоответствия повсюду. С точки зрения всех других процессов триггеры являются частью вставки; до тех пор, пока триггеры не завершатся, вставка также не будет выполнена (другие процессы никогда не видят «неполное» состояние). Полезное чтение для объяснения того, почему это актуально, касается конкретно атомарных действий и соответствия ACID базы данных в целом.