DBAtlas · Атлас эксплуатации баз данных

23P01: exclusion_violation

PostgreSQL

Что это значит?

Нарушено ограничение EXCLUDE (исключения). Этот тип ограничения не допускает конфликта двух строк по определённым операторам (например, перекрытие диапазонов &&); вставленная/обновлённая строка отклонена, так как конфликтует с существующей строкой.

Почему возникает?

Обычно определено ограничение EXCLUDE на основе GiST (например, запрещающее перекрытие времени через tstzrange && для бронирования встреч/помещений), и новая строка имеет диапазон/значение, перекрывающееся с существующей строкой. Также может возникать, когда две параллельные транзакции вставляют перекрывающиеся диапазоны.

Как исправить

Проверяйте перекрытие запросом перед вставкой или перехватывайте ошибку в приложении и показывайте пользователю понятное сообщение. Запросите соответствующий диапазон/условие, чтобы найти конфликтующую существующую строку. Если бизнес-правило допускает перекрытия, ослабьте ограничение; иначе исправьте входные данные. При параллельной работе безопасно повторяйте транзакцию для её сериализации.

Открыть в DBAtlas →

Ещё по этой СУБД