2016-06-13 2 views
2

Есть ли способ добавить ограничение к таблице postgresql, чтобы предотвратить совпадение дат? Например, у меня есть таблица под названием workouts, которая имеет столбцы даты week_start, week_end. Я хочу убедиться, что ни один из диапазонов week_start - week_end не совпадает с любыми существующими диапазонами. ОДНАКО, дата окончания week_start может перекрываться с датой начала week_end.Предотвращение перекрытия даты postgresql

Может кто-нибудь помочь?

Заранее благодарен!

+0

Значит, вы используете номера недель? Если это так, между датами недель может не быть совпадений. – Patrick

ответ

3

Вы можете сделать это с помощью exclusion constraint, используя overlap operator (&&) для daterange type:

CREATE TABLE workouts (
    week_start DATE, 
    week_end DATE, 
    EXCLUDE USING gist (daterange(week_start, week_end) WITH &&) 
) 
+0

Спасибо - подтвердите, позволит ли это перекрытие конца week_start с началом week_end? Например, 6/1 - 6/3 и 6/3 - 6/4 должны быть разрешены. –

+0

@ user1547174: Да, функция 'daterange()' содержит нижнюю границу и исключает верхнюю границу. –

+0

Gotcha - я попробовал команду 'alter table workouts добавить ограничение EXCLUDE ИСПОЛЬЗОВАНИЕ gist (daterange (week_start, week_end) WITH &&);', но я получаю 'ERROR: ошибка синтаксиса в или около" ИСПОЛЬЗОВАНИЕ "' ... Не могли бы вы позволить я знаю, что может быть синтаксической ошибкой? –

1

Вы можете добавить EXCLUDE ограничение таблицы для вашего определения таблицы, а затем работать с диапазонами для обнаружения дублирования. Это будет очень приятно, если вы сможете изменить определение таблицы, чтобы повернуть столбцы week_start и week_end в один диапазон, скажем weeks.

CREATE TABLE workouts (
    ... 
    weeks intrange 
    EXCLUDE USING gist (weeks WITH &&) 
); 

 Смежные вопросы

  • Нет связанных вопросов^_^