在 Postgres 中使用日期范围作为聚合时间序列数据的键

Use daterange as key in Postgres for aggregated time series data

我们正在处理时间序列聚合数据,聚合到固定类型的周期,例如从星期二到星期三的几周。

是否会考虑 "bad practice" 使用 Postgres daterange 类型作为此数据的 key? (而不是例如使用定义此日期范围的 "PeriodID" 键,然后加入日历维度以标识该日期范围。)

在我看来,单独的 "PeriodID" 只是多余的,因为 daterange 有一个非常明确的定义(在我们的设置中,它对每个观察都是唯一的)。

有没有:

在抽象层面上,tstzrange 将是此类聚合的完美表示。

你应该考虑的问题是你将如何查询数据,以及如何有效地使用索引。

如果要索引“包含”运算符 @> 或“重叠”运算符 &&,则不能使用 B 树索引,只能使用 GiST 和 SP-GiST 索引(参见 the documentation).您必须对此进行基准测试,但很可能使用这样的索引比在 timestamptz 列上使用 B 树索引要慢。该索引也可能使用更多 space.

timestamptz 与 B 树索引一起使用的一种简单方法是存储范围的下限并像这样查询:

... WHERE weekstart <= atimestamp
      AND weekstart > atimestamp - INTERVAL '1 week'

或查询重叠区间:

... WHERE weekstart <= endtimestamp
      AND weekstart > starttimestamp - INTERVAL '1 week'