23P01: exclusion_violation
PostgreSQLЧто это значит?
Нарушено ограничение EXCLUDE (исключения). Этот тип ограничения не допускает конфликта двух строк по определённым операторам (например, перекрытие диапазонов &&); вставленная/обновлённая строка отклонена, так как конфликтует с существующей строкой.
Почему возникает?
Обычно определено ограничение EXCLUDE на основе GiST (например, запрещающее перекрытие времени через tstzrange && для бронирования встреч/помещений), и новая строка имеет диапазон/значение, перекрывающееся с существующей строкой. Также может возникать, когда две параллельные транзакции вставляют перекрывающиеся диапазоны.
Как исправить
Проверяйте перекрытие запросом перед вставкой или перехватывайте ошибку в приложении и показывайте пользователю понятное сообщение. Запросите соответствующий диапазон/условие, чтобы найти конфликтующую существующую строку. Если бизнес-правило допускает перекрытия, ослабьте ограничение; иначе исправьте входные данные. При параллельной работе безопасно повторяйте транзакцию для её сериализации.