本文补充了TimescaleDB的压缩策略 + 自动清理历史数据,适用于物联网场景,确保:
老数据不浪费空间(压缩)
极旧数据自动清理(节省存储)
🧩 第一步:压缩策略
TimescaleDB 支持对老数据块压缩(列式压缩),性能和存储都更优。
添加以下内容到你之前的 init/init_timescale.sql 文件末尾:
-- ✅ 启用 sensor_data 的压缩(压缩策略:按时间倒序)
ALTER TABLE sensor_data
SET (timescaledb.compress, timescaledb.compress_orderby = 'time DESC');
-- ✅ 设置压缩策略:自动压缩 7 天前的数据
SELECT add_compression_policy('sensor_data', INTERVAL '7 days');🧹 第二步:自动清理超旧数据(Retention Policy)
TimescaleDB 支持自动删除超出保留时间的数据块。
添加以下 SQL 到同一个文件末尾:
-- ✅ 删除 90 天前的数据(按时间字段)
SELECT add_retention_policy('sensor_data', INTERVAL '90 days');这意味着:
数据保留 90 天;
超出 7 天的数据会被压缩;
超出 90 天的压缩块会自动删除。
🧪 流程概览
┌──────────────┐
│ 近期原始数据 │ ← 最近 7 天,未压缩
└─────┬────────┘
↓
┌──────────────┐
│ 7~90 天数据 │ ← 自动压缩(节省存储)
└─────┬────────┘
↓
┌──────────────┐
│ 90 天以前数据│ ← 自动删除
└──────────────┘✅ 现在,你的 TimescaleDB 实现了:
自动建表并转为
Hypertable写入测试数据
连续聚合
自动聚合刷新
自动压缩历史数据
自动清理超期数据
📦 额外提示(选读)
如果你想手动触发压缩:
SELECT compress_chunk('_timescaledb_internal._hyper_1_1_chunk');查询已压缩的块:
SELECT * FROM timescaledb_information.compressed_chunk_stats;