Ограничение исключения (exclusion constraint)
Обобщение уникальности: вместо требования, чтобы две строки не содержали одно значение, можно потребовать, чтобы они не пересекались, не накладывались и не лежали слишком близко.
Уникальный индекс — частный случай, где оператор оказывается равенством. PostgreSQL позволяет выбрать любой оператор, поддерживаемый типом индекса, и это открывает условия, которые иначе нельзя выразить декларативно. Хрестоматийный пример — бронирование: EXCLUDE USING gist (room WITH =, during WITH &&) говорит, что никакие две строки не могут иметь одну комнату и одновременно пересекающиеся промежутки времени. Альтернатива в приложении — сначала спросить, свободен ли слот, и затем записать; это состояние гонки, которое дожидается достаточного трафика. Для сочетания равенства по обычным столбцам и пересечения по диапазонам нужно расширение btree_gist.