Почему в PostgreSQL уровень Repeatable Read защищает от фантомных чтений, хотя по ANSI SQL не должен?

Стандарт не запрещает более сильные гарантии: он допускает фантомы при Repeatable Read, но не требует их появления. PostgreSQL предотвращает их стабильным MVCC-снимком транзакции.

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

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

Стандарт не запрещает более сильные гарантии: он допускает фантомы при Repeatable Read, но не требует их появления. PostgreSQL предотвращает их стабильным MVCC-снимком транзакции.

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

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

Стандарт не запрещает более сильные гарантии: он допускает фантомы при Repeatable Read, но не требует их появления. PostgreSQL предотвращает их стабильным MVCC-снимком транзакции.

Повторный обычный SELECT не увидит строки, добавленные другой транзакцией после формирования снимка. При этом собственные изменения видны, а Repeatable Read всё ещё не равен Serializable: возможны аномалии совместных решений на основе одного снимка. Для межстрочных бизнес-инвариантов нужны подходящие блокировки или сериализуемое выполнение с повтором при конфликте.

Источник: www.postgresql.org.

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

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

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

Подробнее