从PostgreSQL数据库存档超过时间线的记录

xpu*_*puu 5 database postgresql database-replication

假设我们有一个公交公司的数据库.

  • 我们收集有关公共汽车乘客,乘客名单,燃料等的数据.
  • 我们主要处理即将到来的游乐设施的数据
  • 有时我们需要查看历史记录(用于记帐),但时间范围很短(最多3个月).
  • 由于显而易见的原因(存储浪费,查询速度慢等),我们不希望将所有记录保留在我们的生产/开发服务器上.
  • 我们希望有一个单独的数据库,我们将存档整个历史记录.
  • 在PostgreSQL上实现这一目标的最佳方法是什么?

我们正在寻找这样的东西:

  • 我们想要复制生产数据库(包括结构变更,序列等)
  • 我们希望从生产数据库中删除旧数据,但要从复制中排除这些语句以保持存档不变.

例:

  • 如果巴士行程超过3个月,请将其从生产数据库中删除,但将其保存在归档数据库中.

我们目前正在研究的内容:

  • 某种主/从复制(Slony?).
  • 为特定表启用REPLICA RULE,我们使用一些时间规则修改DELETE/UPDATE语句(WHERE日期<NOW() - interval'6 months')

感谢您的见解.

Chr*_*ers 0

这是逻辑复制(例如 Bucardo 或 Slony)真正可以提供帮助的领域,因为您可以仅复制所需的表并围绕它们维护自己的触发器。在这种情况下,您可以使用更新和删除触发器来存档旧版本的数据,以便您可以查看它。

当然,您也可以使用生产数据库中的触发器来执行此操作,然后按照注释建议使用外部数据包装器。但如果您打算走这条路,您也可以考虑复制到 csv 并加载,这样您就有了一个气隙,并在最终需要时进行转换。