Postgresql 9.2日期范围与条件重叠

时间:2012-09-25 21:37:43

标签: postgresql range date-range postgresql-9.2

正如我在文档中看到的那样,有可能创建拒绝重叠范围的gist索引

CREATE TABLE room_reservation (
    room text,
    during daterange,
    EXCLUDE USING gist (room WITH =, during WITH &&)
);

它工作得很完美,但如何将其调整为不计算无限范围 - '(,)'(例如从-inf到inf的范围)与除self之外的任何内容重叠。例如,我想允许只添加一行无限边界,休息日期范围应该只使用&&操作员检查。

有效数据:

| room | during                   |
| r1   | (,)                      |
| r2   | (10.09.2012, 10.09.2013) |
| r2   | (11.09.2013, 11.11.2013  |

并在=(01.01.2013,01.01.2015)期间插入行将抛出错误。

1 个答案:

答案 0 :(得分:1)

扩展jug的评论

 EXCLUDE USING gist (room WITH =, during WITH &&) WHERE( !isempty(during))