Встречается на собеседованиях • сегодня

Защищает ли Repeatable Read уровень изоляции транзакций от фантомного чтения в PostgreSQL

В PostgreSQL уровень изоляции REPEATABLE READ не защищает от фантомного чтения. Это особенность реализации стандарта SQL в PostgreSQL.

В отличие от некоторых других СУБД (например, MySQL с InnoDB), где REPEATABLE READ блокирует диапазоны и предотвращает фантомы, PostgreSQL использует snapshot-изоляцию. Это означает:

  • Гарантируется, что в рамках транзакции будут видны только данные, зафиксированные до её начала.
  • Но новые строки, добавленные другими транзакциями после начала текущей, могут появиться при повторном запросе (фантомы).

Для защиты от фантомов в PostgreSQL используйте SERIALIZABLE.

Пример:

sql
-- Транзакция 1 (REPEATABLE READ)
BEGIN ISOLATION LEVEL REPEATABLE READ;
SELECT * FROM users WHERE age > 30; -- Вернуло 2 строки

-- Транзакция 2 (параллельно)
INSERT INTO users (name, age) VALUES ('Alice', 35); -- Фиксируется

-- Транзакция 1 повторяет запрос
SELECT * FROM users WHERE age > 30; -- Может вернуть 3 строки (фантом)!
COMMIT;
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы