UPDATE берёт табличную блокировку ROW EXCLUSIVE и блокирует затронутые строки, но это не запрет всех обращений к таблице. Обычные SELECT и изменения независимых строк обычно продолжаются.
Блокирует ли PostgreSQL целую таблицу при изменении данных?
UPDATE берёт табличную блокировку ROW EXCLUSIVE и блокирует затронутые строки, но это не запрет всех обращений к таблице. Обычные SELECT и изменения независимых строк обычно продолжаются.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
UPDATE берёт табличную блокировку ROW EXCLUSIVE и блокирует затронутые строки, но это не запрет всех обращений к таблице. Обычные SELECT и изменения независимых строк обычно продолжаются.
Конфликт зависит от режима блокировки и конкретных данных. Некоторые DDL требуют ACCESS EXCLUSIVE и мешают обычным чтениям. Долгая транзакция удерживает locks дольше и может создать очередь ожидания. Поэтому фраза «PostgreSQL блокирует только строки» неточна, как и утверждение «любое обновление останавливает всю таблицу».
Источник: www.postgresql.org.