postgresql在时间范围内搜索

时间:2014-03-07 11:19:15

标签: sql postgresql postgresql-9.3

所以这就是我要做的事情:

我有很多活动,每个活动代表一个日期时间范围(如07.03.2014 06:00 - 07.03.2014 08:00) 事件与hall_schedule相关联(一对多)。

然后我想搜索没有涵盖某个特定时间范围的事件的所有hall_schedule's,例如:

“我想要所有hall_schedules,其中大厅活动不包括07.03.2014 06:00 - 07.03.2014 08:00范围”

所以问题是,为了获得最佳性能,我该如何设计呢?存储事件以及稍后进行所述搜索的最佳方法是什么?

我很乐意使用特定于postgresql(9.3)的内容,无论哪种方式都能提供最佳性能

1 个答案:

答案 0 :(得分:3)

  1. TIMESTAMP WITH TIME ZONE用于hall_schedule的{​​{1}}和start时间点
  2. 使用tstzrange来检测overlappings,例如:

    end
  3. 注意:

    • 如果需要,您可以将整个范围存储在SELECT * FROM "hall_schedule" WHERE NOT (tstzrange("start", "end", '[]') && tstzrange(:input_start, :input_end, '[]')) 表格的tstzrange列中,但是从应用程序编辑起来比较困难(您必须在任何地方提供其文本表示)
    • 这样,您实际上也可以创建EXCLUDE constraints,以防止hall_schedule中的事件相互重叠,如果您愿意的话。

    更新

    此外,为了加快查询速度,您还可以添加以下索引:

    hall_schedule