没有DELETE语句的Postgresql复制

时间:2015-12-09 06:48:29

标签: postgresql database-replication

我们要求说我们应该在一个点上拥有系统中所有项目的副本。解释它的最简单方法是复制但忽略delete语句(INSERT和UPDATE都可以) 这可能吗 ?或者更好的问题是解决这类问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

制作当前数据库的副本/副本,并通过dblink从当前数据库使用触发器到副本。插入后和更新后触发器使用以在副本中插入和更新数据。

因此,只要在当前数据库中进行行插入/更新,它就会直接反映到副本。

答案 1 :(得分:0)

我不确定我是否完全理解这个问题,但我会尽力帮助:

  • 首先(与@Sunit相反) - 我建议避免使用触发器。触发器会带来额外的开销并影响性能。
  • 我会使用的解决方案(我实际上在我的几个项目中使用了类似的需求) - 根本不使用DELETE。相反,您可以添加名为"已删除"的位(布尔)列,将其默认值设置为0(false),而不是删除该行,您将此字段更新为1(true)。您还需要更改其他查询(SELECT)以包含类似" WHERE Deleted = 0"。
  • 另一个选择是像往常一样继续使用DELETE,并允许从主副本和副本中删除记录,但配置WAL归档,并将WAL归档存储在某个共享目录中。这将允许您进行即时恢复,这意味着您可以在任何时刻(即删除之前)将另一个PostgreSQL实例恢复到您的群集状态。这样您就可以获得已删除记录的痕迹,但是访问记录的过程相当复杂。取决于将来检查删除的记录的频率(可能根本没有检查,但只是保留以便进行实际跟踪)这种方法也有帮助。