Какой уровень блокировки строк по умолчанию используется в PostgreSQL при выполнении запроса SELECT?

  • 19 августа 2023 г. 16:06
Ответы на вопрос 3
Здравствуйте,

В PostgreSQL уровень блокировки строк по умолчанию для операции SELECT зависит от текущего уровня изоляции транзакции. Вот соответствия:

1. Уровень изоляции READ UNCOMMITTED: Не применяются блокировки строк.

2. Уровень изоляции READ COMMITTED: По умолчанию используется блокировка FOR SHARE для каждой выбранной строки. Если задана конструкция FOR UPDATE, то применяется блокировка FOR UPDATE.

3. Уровень изоляции REPEATABLE READ: По умолчанию используется блокировка FOR SHARE для каждой выбранной строки. Если задана конструкция FOR UPDATE, то применяется блокировка FOR UPDATE.

4. Уровень изоляции SERIALIZABLE: По умолчанию используется блокировка FOR SHARE для каждой выбранной строки. Если задана конструкция FOR UPDATE, то применяется блокировка FOR UPDATE.

Обратите внимание, что уровни блокировки могут быть изменены с помощью соответствующих предложений в запросе SELECT, а также с помощью команды SET TRANSACTION ISOLATION LEVEL.

Если у вас возникнут еще вопросы, не стесняйтесь задавать.
Для выполнения простого SELECT запроса в PostgreSQL, требуется получение блокировки AccessShareLock на таблицу, индексы и другие объекты. При этом не применяются блокировки на уровне строк, так как они не требуются.
 [Документация PostgreSQL](https://www.postgresql.org/docs/current/transaction-iso.html#TRANSACTION-READ-COMMITTED) утверждает, что уровень изоляции по умолчанию в PostgreSQL - Read Committed. То же самое справедливо и для Oracle.
Похожие вопросы