我有一个 Postgres 数据库,其中有一个表格records用于记录温湿度记录。

每天产生的数据很多,因为生产环境资源有限,我必须周期性将比较久的历史记录(比如 3 个月前)删除掉。

但是,这些删除的记录实际上是有意义的,只能在生产环境删除,在后台环境实际要保留。我想到两个方案来实现:

方案 A:

在后台环境对生产环境进行 logical replication ,但是指定订阅的动作是INSERTUPDATE,这样即使每天将历史记录删除,也不会同步删除后台环境的记录,从而保持下来了。

但是这样有个问题,就是如果万一有一天需要重新同步(比如发生故障后主备切换,重新建立发布-订阅关系),那么这些历史数据就无法简单的保留了。

方案 B:

在后台环境对生产环境进行 logical replication ,对records表格进行常规的所有操作同步。但是在后台环境的数据库中建立一个新的同结构备份表格,比如archive_records。当从生产环境删除的时候,同时将记录移动到archive_records表中。

这种方式有个不好的地方,就是跨库操作相对比较麻烦一点,需要用到 dblink 等操作。另外如果表格修改后,这一堆操作可能都得重新审计。

不知道各位大佬觉得哪个好,或者有没有更好的方案。

举报· 104 次点击
登录 注册 站外分享
快来抢沙发
0 条回复  
返回顶部