Перейти к содержимому
IMOEX 2209.84 0.8%
·Технологии·1 августа 2026 г.

Двойная бронь: как мы поймали гонку в записи и закрыли её EXCLUDE-констрейнтом

Двойная бронь: как мы поймали гонку в записи и закрыли её EXCLUDE-констрейнтом

Я делаю сервис онлайн-записи для салонов красоты: клиент записывается в чат-боте или на странице, а запись падает в расписание мастера. Однажды мастер написал мне: на 15:00 к ней пришли два клиента. Оба записаны, оба уверены, что слот их. Классическая двойная бронь — и классическая race condition. Разберу, почему наивная проверка «свободно ли время?» не спасает, и как мы закрыли дыру двумя слоями: advisory-lock и EXCLUDE-констрейнтом в PostgreSQL. По пути — один неочевидный подвох с IMMUTABLE, на который легко напороться.

Это отрывок статьи. Полную версию читайте на сайте источника по ссылке ниже.

Источник: Habr