Что такое аномалия «несогласованного чтения» (non-repeatable read) и на каком минимальном уровне изоляции транзакций в PostgreSQL она полностью исчезает?

Non-repeatable read — изменение результата повторного чтения одной строки из-за commit другой транзакции. В PostgreSQL минимальный уровень, исключающий это, — Repeatable Read.

Короткий ответ

Что ответить на собеседовании

Non-repeatable read — изменение результата повторного чтения одной строки из-за commit другой транзакции. В PostgreSQL минимальный уровень, исключающий это, — Repeatable Read.

Подробный разбор

Ответ с пояснениями

Non-repeatable read — изменение результата повторного чтения одной строки из-за commit другой транзакции. В PostgreSQL минимальный уровень, исключающий это, — Repeatable Read.

При Read Committed каждый SQL-оператор получает актуальный снимок. Поэтому два SELECT одной строки внутри транзакции могут увидеть разные значения, если между ними другая транзакция выполнила UPDATE или DELETE и commit.

Repeatable Read сохраняет снимок для транзакции, поэтому внешнее изменение не становится видимым при следующем чтении. Собственные изменения транзакция по-прежнему видит. Это не равно полной сериализуемости: межстрочные инварианты могут требовать Serializable или специально согласованных блокировок.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее