我有一个 Postgres 数据库,其中有一个表格records 用于记录温湿度记录。
每天产生的数据很多,因为生产环境资源有限,我必须周期性将比较久的历史记录(比如 3 个月前)删除掉。
但是,这些删除的记录实际上是有意义的,只能在生产环境删除,在后台环境实际要保留。我想到两个方案来实现:
方案 A:
在后台环境对生产环境进行 logical replication ,但是指定订阅的动作是INSERT 和UPDATE ,这样即使每天将历史记录删除,也不会同步删除后台环境的记录,从而保持下来了。
但是这样有个问题,就是如果万一有一天需要重新同步(比如发生故障后主备切换,重新建立发布-订阅关系),那么这些历史数据就无法简单的保留了。
方案 B:
在后台环境对生产环境进行 logical replication ,对records 表格进行常规的所有操作同步。但是在后台环境的数据库中建立一个新的同结构备份表格,比如archive_records 。当从生产环境删除的时候,同时将记录移动到archive_records 表中。
这种方式有个不好的地方,就是跨库操作相对比较麻烦一点,需要用到 dblink 等操作。另外如果表格修改后,这一堆操作可能都得重新审计。
不知道各位大佬觉得哪个好,或者有没有更好的方案。
|