ドキュメントにあるように、重複する範囲を拒否する Gist インデックスを作成する可能性があります
CREATE TABLE room_reservation (
room text,
during daterange,
EXCLUDE USING gist (room WITH =, during WITH &&)
);
それは完璧に機能しますが、無限の範囲をカウントしないように調整する方法 - '(,)' (たとえば、-inf から inf までの範囲) を自己以外のものと重複するものとしてカウントします。たとえば、無限の境界を持つ行を 1 つだけ追加できるようにしたいのですが、残りの日付範囲は && 演算子を使用して確認する必要があります。
有効なデータ:
| | 部屋 | 中 | | | r1 | (,) | | | r2 | (2012 年 9 月 10 日、2013 年 9 月 10 日) | | | r2 | (2013 年 9 月 11 日、2013 年 11 月 11 日 |
during = (01.01.2013, 01.01.2015) で行を挿入すると、エラーが発生します。