Что такое Phantom Read («фантомное чтение»)? Почему в PostgreSQL на уровне изоляции транзакций Repeatable Read фантомные чтения невозможны, хотя по стандарту ANSI SQL они допускаются на этом уровне?

Phantom read — изменение набора строк того же условия из-за commit другой транзакции. PostgreSQL Repeatable Read использует стабильный MVCC-снимок и не показывает такие новые строки.

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

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

Phantom read — изменение набора строк того же условия из-за commit другой транзакции. PostgreSQL Repeatable Read использует стабильный MVCC-снимок и не показывает такие новые строки.

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

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

Phantom read — изменение набора строк того же условия из-за commit другой транзакции. PostgreSQL Repeatable Read использует стабильный MVCC-снимок и не показывает такие новые строки.

Снимок фиксируется при первом содержательном запросе транзакции, а не обновляется на каждый SELECT. Собственные изменения транзакция видит. Стандарт допускает более сильные гарантии реализации, поэтому отсутствие фантомов не противоречит ему. При этом Repeatable Read не исключает все аномалии сериализации, например write skew; для них нужен Serializable или явное обеспечение инварианта.

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

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

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

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

Подробнее