← 中文资源

简体中文版本

为时序数据添加保留策略

按时间分区,定期丢弃或汇总旧分区,并让查询有界,使存储与延迟保持可预期。

阅读英文原文

概述

时序表的典型遭遇是无限增长:查询变慢、成本上升,而用 DELETE 清理旧行又会带来 vacuum 压力。分区加定期丢弃可把删除变成瞬时元数据操作,同时保持查询有界。

关键步骤

  1. 按时间列创建范围分区表。
  2. 预先创建未来分区并为每个分区建索引。
  3. 丢弃超过保留窗口的分区,而非删除行。
  4. 若需保留历史,在丢弃前汇总或归档分区。

验证

  • 查询按分区键过滤时只扫描相关分区。
  • 丢弃分区为瞬时且不产生 vacuum 负担。
  • 新数据始终有带索引的目标分区。
  • 汇总结果在原始数据被丢弃后仍然可用。

注意事项

  • 分区增加管理开销,且不会加速忽略时间列的查询。
  • 丢弃分区会不可逆地移除原始数据,故汇总必须先于丢弃完成。

适用范围

本条目围绕「为时序数据添加保留策略」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。

CREATE TABLE metrics (ts timestamptz NOT NULL, name text, value real)
  PARTITION BY RANGE (ts);
CREATE TABLE metrics_p2026_10 PARTITION OF metrics
  FOR VALUES FROM ('2026-10-01') TO ('2026-11-01');
-- retention: instant, cheap
DROP TABLE metrics_p2026_07;