на пересечение range объектов в таблице, кроме как что то типа такого ?
ALTER TABLE tbl ADD CONSTRAINT tbl_no_overlapping_time_ranges
EXCLUDE USING gist (tsrange(starts_at, ends_at) WITH &&)
И что по поводу перформанса проверки на пересечение при вставке в таблицу или обновление ? Какие потенциальные риски и как их можно предотвратить
1) Нормальных — вряд ли. А так — жэлающие могут попробовать триггерами и блокировками проверять. Непонятно, правда, зачем, когда разработчики дали такой вот работающий инструмент. 2) Учитывая, что gist-индэкс как раз индэксирует эти операцыи — перформанс обычно высокий. Собственно, если просто range, а не multirange — то по-моему стабильно-высокий, дажэ сломать его не так просто. 3) Подводные камни... Ну, например, что в других СУБД такого чаще нет.
Ну вот потенциальный риск, например: https://wiki.postgresql.org/wiki/SerializableToDo (третий пункт). Ну и сами gist indexes не то что бы сплошная радость — [куда] медленнее, чем b-tree, строиться могут очень долго (я про re(index)), да размер у них побольше.
Обсуждают сегодня