1
予約したテーブルがあります。日付範囲と時間範囲が予約されています。彼らはまた、他のいくつかのモデルに属しています。私は重複する時間のために予約が発生することを不可能にする制約を追加したいと思う。PostgreSQLのwhere節に制約を追加するにはどうすればよいですか?
私はこれを持っている:
CREATE TABLE reservations (
id integer NOT NULL,
dates daterange,
times timerange,
desk_id integer NOT NULL,
space_id integer,
);
ALTER TABLE reservations ADD EXCLUDE USING gist (dates WITH &&, times WITH &&)
それはうまく動作します。しかし、私はこの制約をdesk_idとclient_idの範囲にしたいと思っています。
このレコードが異なるdesk_idまたはspace_idの場合は、時間/日付が重複するようにレコードを保存することができます。
どうすればいいですか?
、ありがとう。私は最初に 'CREATE EXTENSION btree_gist;'を実行しなければなりませんでした。 日付と時刻を表すために2つの異なるフィールドを使用するのは、ある日付範囲の特定の時間の予約であるためです。 「月曜日から金曜日までの9時から15時まで」と考えてください。 「datetimes tsrange」が1つしかなかった場合、この時間範囲は連続したものになります。 – Nerian
オクラホマ、それを得て、理にかなっている。あなたは00:00境界を越えることができないという制限があります。私は私の答えのうち、該当しない部分をクリアしました。 – joanolo