Параллелизм Postgresql

В проекте, над которым я работаю, есть таблица с триггером «при обновлении», который отслеживает, изменился ли логический столбец (например: false -> true = выполнить какое-либо действие). Но это действие можно делать только один раз за ряд.

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

Сам ли триггер «обновления» обрабатывает параллелизм, или мне нужно сделать это в транзакции и вручную заблокировать таблицу?

Наблюдали ли вы какое-либо существенное падение производительности при одновременном срабатывании нескольких триггеров?

ady 11.05.2015 14:41
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
6
1
3 689
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Триггеры не обрабатывают параллелизм, и PostgreSQL должен поступать правильно, независимо от того, используете вы явные транзакции или нет.

PostgreSQL использует оптимистическая блокировка, что означает, что первый, кто действительно обновит строку, получает блокировку этой строки. Если второй человек пытается обновить строку, его оператор обновления ждет, чтобы увидеть, подтвердит ли первый свое изменение или откатится.

Если первый человек совершает фиксацию, второй человек получает ошибку, а не его изменение, которое происходит и стирает изменение, которое могло быть им интересно.

Если первый человек откатывается, обновление второго человека разблокируется и выполняется нормально, потому что теперь оно ничего не перезаписывает.

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

Другие вопросы по теме