Вопрос проверяет знание транзакций и аномалий изоляции, понимание, какие проблемы они решают и чем отличаются.
Read Committed гарантирует, что читаются только закоммиченные данные, но разные SELECT в одной транзакции могут видеть разное. Repeatable Read фиксирует снапшот в начале транзакции, и все запросы внутри её видят одну картину.
Read Committed:
каждый запрос видит только коммитнутые данные;
но если сделать два SELECT подряд, результаты могут отличаться (non-repeatable read).
Repeatable Read:
вся транзакция работает с единым снимком данных;
никакие новые коммиты других транзакций не видны;
предотвращает non-repeatable read, но фантомные чтения всё ещё возможны (хотя в Postgres почти нет).
-- транзакция 1
BEGIN;
SELECT balance FROM accounts WHERE id=1; -- 100
-- транзакция 2 параллельно обновляет balance=200 и коммитит
SELECT balance FROM accounts WHERE id=1; -- в Read Committed: уже 200, в Repeatable Read: всё ещё 100Вывод: выбор уровня изоляции зависит от задачи: Read Committed быстрее, Repeatable Read безопаснее при аналитике.