2016-06-13 21 views
2

日付が重複しないようにpostgresql表に制約を追加する方法はありますか?たとえば、workoutsという名前のテーブルがあり、日付カラムがweek_startweek_endのものがあります。 week_start - week_endの範囲のいずれも既存の範囲と重複しないようにしたいと思います。ただし、終了日がweek_startの場合は、開始日がweek_endになる場合があります。日付重複の防止postgresql

誰かが助けることができますか?

ありがとうございます!あなたがdaterange typeためoverlap operator (&&)を使用して、exclusion constraintでこれを行うことができます

+0

あなたは週番号を使用していますか?そうであれば、数週間の間に重複はありません。 – Patrick

答えて

3

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を追加しようとしましたが、gst(daterange(week_start、week_end)WITH &&); 'を使用して例外を除外しましたが、'エラー:構文エラー "またはUSING" –

1

あなたのテーブル定義にEXCLUDEテーブル制約を追加し、重複を検出するために、範囲を扱うことができます。これは、テーブル定義を変更してweek_startweek_endという列を1つの範囲、たとえばweeksにすることができれば、本当にうまくいくでしょう。

CREATE TABLE workouts (
    ... 
    weeks intrange 
    EXCLUDE USING gist (weeks WITH &&) 
); 
関連する問題