首页 > 解决方案 > 有效地在 Postgres 数据库中提前查询最后一个数据集 x

问题描述

如何使用 Postgres 有效地存储和检索以非周期性方式(偶尔)发生的基于时间的数据集?以下是此类基于时间的表的定义示例:

CREATE TABLE example
(
  time_ timestamp(0) with time zone NOT NULL DEFAULT now(),
  id integer,
  value integer
)

该表的特点是没有周期性出现的数据集。如果要为所有 id 生成以每个 id 的最后一个值开始的更改协议,则必须执行如下 SQL 语句:

-- 在 start_time 之前检索每个 id 的 id 和最后一个时间戳

select max(time_),id from example where time_ <= start_time group by id;

使用这些结果,您可以创建查询以检索报告的第一个数据集。

现在的问题是:当这个历史表包含许多数据集时,max(time_)-query 将是低效的,因为数据库没有办法为这个查询有效地索引表。我们当前的解决方案是为每个历史表创建一个附加表,在该表中我们定期为当前时间点的数据集的当前状态创建快照,这样我们只需从上次拍摄的快照开始在表中查找数据集报告开始时间之前。Postgres 是否有任何集成功能可用于在开始时使用每个 id 的最后一个值进行报告的任务,我们可以将其用于此任务(例如 Informix 时间序列)?

标签: postgresqltime-series

解决方案


推荐阅读