Уникальный индекс PostgreSQL на основе числового поля ранжирования - PullRequest
2 голосов
/ 11 марта 2011

У меня есть таблица scheduleitem со столбцами для room, dayofweek, starttime и endtime. Я хотел бы иметь возможность создать уникальный индекс для room и dayofweek, где предикат (каким-то образом) предотвращает наложение таблицы с временами перекрытия, то есть предотвращает перекрытие там, где есть потенциальная новая строка r2 и любой заданный существующая строка r1 удовлетворяет

r2.endtime > r1.starttime and r1.endtime > r2.starttime

Пока что я не могу добавить подзапрос к предикату частичного индекса, и любая хранимая процедура, на которую я ссылаюсь в списке уникальных столбцов, должна быть неизменной (не может выполнять какие-либо запросы), поэтому я в тупике.

Ответы [ 2 ]

5 голосов
/ 11 марта 2011

Вам нужна функция ИСКЛЮЧЕНИЯ ИСКЛЮЧЕНИЯ - см. http://www.postgresql.org/docs/9.0/static/sql-createtable.html и посмотрите часть об ИСКЛЮЧЕНИИ.

1 голос
/ 11 марта 2011

Почему бы просто не использовать триггер? Вы можете прочитать о них здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...