Базы данных / SQL middle
Repeatable Read в PG решает фантомное чтение — почему?
Ответ
В стандарте SQL Repeatable Read допускает phantom reads. В PG благодаря MVCC (snapshot isolation): транзакция видит snapshot данных на момент начала. Новые строки, вставленные другими транзакциями после старта снимка, ей не видны — поэтому фантомы не появляются без всяких блокировок диапазонов.
Разбор: PG реализует Repeatable Read через MVCC/snapshot isolation: транзакция работает со снимком данных на момент своего первого запроса, поэтому строки, вставленные параллельными транзакциями после старта снимка, ей не видны — фантомы не появляются без всяких блокировок диапазонов. Предикатных блокировок и range-lock здесь нет (это про S2PL), а Repeatable Read и Serializable в PG — разные уровни (последний добавляет SSI-проверки на сериализуемость).
Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.