从超过时间线的 PostgreSQL 数据库中归档记录
Archiving records from PostgreSQL database that surpass timeline
假设我们有一个巴士公司的数据库。
- 我们收集有关巴士乘车、乘客名单、燃料等的数据
- 我们主要处理有关即将到来的游乐设施的数据
- 有时我们需要查看历史记录(用于记账),但时间框架很短(最多 3 个月)。
- 出于显而易见的原因(存储浪费、查询缓慢等),我们不想将所有记录都保留在我们的 production/development 服务器上。
- 我们希望有一个单独的数据库来存档整个历史。
- 在 PostgreSQL 上实现此目标的最佳方法是什么?
我们正在寻找这样的东西:
- 我们要复制生产数据库(包括结构更改、序列等)
- 我们想从生产数据库中删除旧数据,但从复制中排除这些语句以保持存档不受影响。
示例:
- 当公交车旅行超过 3 个月时,将其从生产数据库中删除,但将其保留在存档数据库中,它已经存在。
我们目前正在研究的内容:
- 某种 Master/Slave 复制(Slony?)。
- 为特定表启用复制规则,我们用一些时间规则修改 DELETE/UPDATE 语句(WHERE date < NOW() - interval '6 months')
感谢您的见解。
这是逻辑复制(如 Bucardo 或 Slony)真正有用的领域,因为您可以只复制您想要的表并在它们周围维护您自己的触发器。在这种情况下,您可以使用更新和删除触发器来存档旧版本的数据,以便您可以查看它。
当然,您也可以在生产数据库中使用触发器来执行此操作,然后按照评论建议使用外部数据包装器。但是如果你走那条路,你也可以考虑复制到 csv 和加载,这样你就有了气隙,如果最终需要的话可以进行转换。
假设我们有一个巴士公司的数据库。
- 我们收集有关巴士乘车、乘客名单、燃料等的数据
- 我们主要处理有关即将到来的游乐设施的数据
- 有时我们需要查看历史记录(用于记账),但时间框架很短(最多 3 个月)。
- 出于显而易见的原因(存储浪费、查询缓慢等),我们不想将所有记录都保留在我们的 production/development 服务器上。
- 我们希望有一个单独的数据库来存档整个历史。
- 在 PostgreSQL 上实现此目标的最佳方法是什么?
我们正在寻找这样的东西:
- 我们要复制生产数据库(包括结构更改、序列等)
- 我们想从生产数据库中删除旧数据,但从复制中排除这些语句以保持存档不受影响。
示例:
- 当公交车旅行超过 3 个月时,将其从生产数据库中删除,但将其保留在存档数据库中,它已经存在。
我们目前正在研究的内容:
- 某种 Master/Slave 复制(Slony?)。
- 为特定表启用复制规则,我们用一些时间规则修改 DELETE/UPDATE 语句(WHERE date < NOW() - interval '6 months')
感谢您的见解。
这是逻辑复制(如 Bucardo 或 Slony)真正有用的领域,因为您可以只复制您想要的表并在它们周围维护您自己的触发器。在这种情况下,您可以使用更新和删除触发器来存档旧版本的数据,以便您可以查看它。
当然,您也可以在生产数据库中使用触发器来执行此操作,然后按照评论建议使用外部数据包装器。但是如果你走那条路,你也可以考虑复制到 csv 和加载,这样你就有了气隙,如果最终需要的话可以进行转换。