Какой уровень изоляции транзакций достаточен для сценария с двумя врачами и нарушением ограничения на минимальное число дежурных?

Для защиты от write skew без дополнительных блокировок нужен Serializable с повтором всей транзакции при конфликте. Один лишь Repeatable Read в PostgreSQL это ограничение не гарантирует.

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

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

Для защиты от write skew без дополнительных блокировок нужен Serializable с повтором всей транзакции при конфликте. Один лишь Repeatable Read в PostgreSQL это ограничение не гарантирует.

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

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

Для защиты от write skew без дополнительных блокировок нужен Serializable с повтором всей транзакции при конфликте. Один лишь Repeatable Read в PostgreSQL это ограничение не гарантирует.

Оба врача читают, что дежурят двое, и каждый снимает своё дежурство в отдельной строке. Прямого конфликта записи нет, но совместный результат нарушает правило «минимум один».

Альтернатива — сериализовать изменения расписания блокировкой общей строки смены: получить её, заново проверить число дежурных, затем выполнить изменение. Такой протокол должны соблюдать все пути записи; при подходящей организации достаточно Read Committed. Блокировка только строки уходящего врача не защищает межстрочный инвариант. Serializable требует корректной обработки serialization failure, а не слепого повтора одного SQL.

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

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

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

Подробнее