PostgreSQL/TimescaleDB: 如何只保存相对于最后一个相似行有增量的行?

PostgreSQL/TimescaleDB: How to save only rows with a delta relative to the last similar row?

我有一个 table 存储一般形式 (time, value1, value2, value3) 的行,其中每个 value 通常在很长一段时间内保持不变(但两者不必须同时改变)。我不想浪费 space 来存储许多没有变化的行。

我见过 TimescaleDB query to select rows where column value changed from previous row,但它依赖于 window 函数,其中 table 作为一个整体已经包含所有未更改的行。拥有某种 table 约束以便插入可以简单地 ON CONFLICT DO NOTHING 不是更好吗?

我也考虑过结构 (time, kind, value),因为这样可能更容易编写请求的约束,因为不需要处理“只有一个”的情况值改变”,但我不确定。

如果您的主要目标是保存 space,我将对您存储原始数据的 space 开销进行基准测试,并确保启用压缩。如果你有很长 运行 个相同的值,运行 长度编码应该 真正 很好地压缩。

https://docs.timescale.com/latest/using-timescaledb/compression

我只知道部分答案,但我想我会提供那个观察结果。

(TImescaleDB 人在这里)