Триггеры не обрабатывают параллелизм, и PostgreSQL должен делать правильные вещи независимо от того, используете ли вы явные транзакции.
PostgreSQL использует оптимистическую блокировку , что означает, что первый человек, который фактически обновит строку, получит блокировку этой строки. Если второй человек пытается обновить строку, его оператор обновления ждет, чтобы увидеть, фиксирует ли первый изменение или откатывает.
Если первый человек совершает коммит, второй человек получает ошибку, а не его изменение, проходящее и стирающее изменение, которое могло бы быть им интересно.
Если первый человек откатывается, обновление второго человека разблокируется и проходит нормально, потому что теперь ничего перезаписывать не будет.
Второй человек также может использовать опцию NOWAIT
, которая немедленно вызывает ошибку, а не блокирует, если их обновление конфликтует с неразрешенным изменением.