Уровни изоляции

В PostgreSQL REPEATABLE READ предотвращает перезапись конкурентно изменённой строки из старого снимка, завершая такую транзакцию ошибкой. Её нужно повторить целиком; для более общих инвариантов рассмотрите SERIALIZABLE.

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

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

В PostgreSQL REPEATABLE READ предотвращает перезапись конкурентно изменённой строки из старого снимка, завершая такую транзакцию ошибкой. Её нужно повторить целиком; для более общих инвариантов рассмотрите SERIALIZABLE.

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

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

Условие

Уровни изоляции

Существующие уровни изоляции (стандарты) READ_UNCOMMITTED READ_COMMITTED REPEATABLE_READ SERIALIZABLE

Задача Есть 3 entity:

  • Entity1
  • Entity2
  • Entity3

База данных postgres

Задача Какой уровень изоляции для обеих транзакций для гарантии отсутствия потери данных в данных сценариях и почему:

Сценарий 1 (соответствует времени выполнения)

  • Open transaction 1;

  • select Entity1;

  • select Entity2;

  • Open transaction 2;

  • select Entity1;

  • update Entity1; **********

  • Commit transaction 2;

  • update Entity1; ->transaction 1

  • update Entity2; ->transaction 1

Ответ

В PostgreSQL REPEATABLE READ предотвращает перезапись конкурентно изменённой строки из старого снимка, завершая такую транзакцию ошибкой. Её нужно повторить целиком; для более общих инвариантов рассмотрите SERIALIZABLE.

В сценарии T1 уже читала Entity1, затем T2 изменила её и закоммитилась. При REPEATABLE READ T1 не сможет просто обновить новую версию из своего старого снимка: ожидается serialization failure. READ COMMITTED допускает потерю изменения, если приложение записывает заранее вычисленное устаревшее значение. Альтернатива — ранний SELECT FOR UPDATE или проверка версии. Сам уровень не гарантирует успех обеих попыток: нужны повторы и корректная бизнес-логика для Entity2.

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

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

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

Подробнее