В PostgreSQL существуют разные способы блокировки строк, в зависимости от типа блокируемого объекта и характера блокировки. docs.arenadata.io
По типу блокируемого объекта выделяют блокировки на уровне таблицы, строки и страницы: docs.arenadata.io
- Блокировки на уровне таблицы. docs.arenadata.io Например, ACCESS SHARE (AccessShareLock) для запросов, которые только читают таблицу и не изменяют её. docs.arenadata.io ACCESS EXCLUSIVE (AccessExclusiveLock) гарантирует, что только транзакция, получившая эту блокировку, сможет получить доступ к таблице. docs.arenadata.io
- Блокировки на уровне строки. postgrespro.ru Они блокируют только запись в определённые строки, но никак не влияют на выборку. postgrespro.ru Некоторые режимы блокировки строк: FOR UPDATE (полное изменение или удаление строки), FOR NO KEY UPDATE (изменение только тех полей, которые не входят в уникальные индексы). slonik.readthedocs.io habr.com
- Блокировки на уровне страницы. docs.arenadata.io Используются для управления доступом для чтения/записи к страницам таблиц в общем пуле буферов. docs.arenadata.io Такие блокировки снимаются немедленно после выборки или обновления строки. docs.arenadata.io
По характеру блокировки выделяют исключительные (exclusive) и разделяемые (shared) блокировки: slonik.readthedocs.io docs.arenadata.io
Также в PostgreSQL есть рекомендательные блокировки (advisory locks), значение которых определяется приложением. docs.arenadata.io Есть два способа получения такой блокировки: на уровне сессии и на уровне транзакции. docs.arenadata.io