Non-repeatable read — изменение результата повторного чтения одной строки из-за commit другой транзакции. В PostgreSQL минимальный уровень, исключающий это, — Repeatable Read.
Что такое аномалия «несогласованного чтения» (non-repeatable read) и на каком минимальном уровне изоляции транзакций в PostgreSQL она полностью исчезает?
Non-repeatable read — изменение результата повторного чтения одной строки из-за commit другой транзакции. В PostgreSQL минимальный уровень, исключающий это, — Repeatable Read.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Non-repeatable read — изменение результата повторного чтения одной строки из-за commit другой транзакции. В PostgreSQL минимальный уровень, исключающий это, — Repeatable Read.
При Read Committed каждый SQL-оператор получает актуальный снимок. Поэтому два SELECT одной строки внутри транзакции могут увидеть разные значения, если между ними другая транзакция выполнила UPDATE или DELETE и commit.
Repeatable Read сохраняет снимок для транзакции, поэтому внешнее изменение не становится видимым при следующем чтении. Собственные изменения транзакция по-прежнему видит. Это не равно полной сериализуемости: межстрочные инварианты могут требовать Serializable или специально согласованных блокировок.