【问题标题】:Archiving records from PostgreSQL database that surpass timeline从 PostgreSQL 数据库中归档超过时间线的记录
【发布时间】:2015-08-25 13:14:50
【问题描述】:

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

  • 我们收集有关巴士行程、乘客名单、燃料等的数据。
  • 我们主要处理有关即将到来的游乐设施的数据
  • 有时我们需要查看历史记录(用于会计),但时间框架很短(最多 3 个月)。
  • 出于明显的原因(存储浪费、查询速度慢等),我们不想将所有记录保留在我们的生产/开发服务器上。
  • 我们希望有一个单独的数据库来存档整个历史记录。
  • 在 PostgreSQL 上实现这一目标的最佳方法是什么?

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

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

例子:

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

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

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

感谢您的见解。

【问题讨论】:

  • 我会考虑一个Foreign Data Wrapper,它的查询按计划运行(cron 作业或类似的)。把事情简单化。这样可以减少出错或混淆的机会。

标签: database postgresql database-replication


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多