归档PostgreSQL数据库中超过时间线

时间:2015-08-25 13:14:51

标签: database postgresql database-replication

假设我们有一个巴士公司的数据库。

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

我们正在寻找类似的东西:

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

示例:

  • 当公共汽车旅行超过3个月时,将其从生产数据库中删除,但将其保存在已存在的存档数据库中。

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

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

感谢您的见解。

1 个答案:

答案 0 :(得分:0)

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

当然,您也可以使用生产数据库中的触发器执行此操作,然后根据注释建议使用外部数据包装器。但是如果你正在走这条路线,你也可以考虑复制到csv和加载,这样你就有了气隙,并且如果最终需要的话会做转换。