1

ドキュメントにあるように、重複する範囲を拒否する 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) で行を挿入すると、エラーが発生します。

4

1 に答える 1

1

水差しのコメントを拡大するには

 EXCLUDE USING gist (room WITH =, during WITH &&) WHERE( !isempty(during))
于 2012-10-28T10:07:20.110 に答える