Встречается на собеседованиях • сегодня
Защищает ли 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;
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы