【问题标题】:Postgresql 9.2 date ranges overlap with conditionsPostgresql 9.2 日期范围与条件重叠
【发布时间】:2012-09-25 21:37:43
【问题描述】:

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

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

它工作得很好,但是如何调整它以不计算无限范围 - '(,)'(例如从 -inf 到 inf 的范围)重叠到除了 self 之外的任何东西。例如,我想只允许添加一行无限边界和休息日期范围应该只使用 && 运算符来检查。

有效数据:

|房间 |期间| | r1 | (,) | | r2 | (10.09.2012, 10.09.2013) | | r2 | (11.09.2013, 11.11.2013 |

使用 during = (01.01.2013, 01.01.2015) 插入行会抛出错误。

【问题讨论】:

  • 您应该能够通过在排除约束中添加正确的“WHERE(谓词)”来使用部分索引来忽略无限范围(请参阅postgresql.org/docs/9.2/static/…)。

标签: postgresql range date-range postgresql-9.2


【解决方案1】:

展开jug的评论

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

【讨论】:

    猜你喜欢
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    相关资源
    最近更新 更多