Стандарт не запрещает более сильные гарантии: он допускает фантомы при Repeatable Read, но не требует их появления. PostgreSQL предотвращает их стабильным MVCC-снимком транзакции.
Почему в PostgreSQL уровень Repeatable Read защищает от фантомных чтений, хотя по ANSI SQL не должен?
Стандарт не запрещает более сильные гарантии: он допускает фантомы при Repeatable Read, но не требует их появления. PostgreSQL предотвращает их стабильным MVCC-снимком транзакции.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Стандарт не запрещает более сильные гарантии: он допускает фантомы при Repeatable Read, но не требует их появления. PostgreSQL предотвращает их стабильным MVCC-снимком транзакции.
Повторный обычный SELECT не увидит строки, добавленные другой транзакцией после формирования снимка. При этом собственные изменения видны, а Repeatable Read всё ещё не равен Serializable: возможны аномалии совместных решений на основе одного снимка. Для межстрочных бизнес-инвариантов нужны подходящие блокировки или сериализуемое выполнение с повтором при конфликте.
Источник: www.postgresql.org.