使用DBlink同步postgres中的两个表

时间:2015-08-10 21:52:19

标签: postgresql dblink

我希望在两个不同的服务器(server1和server2)中有两个同步的数据库,所以:

    当server1中的table1时,server1中的
  • table1更新server2中的table1    变化

    当server1中的table1时,server2中的
  • table1更新server1中的table1 变化

这样我可以从两个服务器更新两个表同步,我已经设法使用DBlink没有问题从server1更新到服务器2。

有什么问题?当两个表都启用了触发器时,它会创建一个无限循环,因此server1会更改然后更新server2,然后它会更改并更新server1,依此类推。 有没有办法在没有这个问题的情况下做我需要的东西?

感谢。

1 个答案:

答案 0 :(得分:2)

使用table1中的附加字段(标志)和有条件执行的触发器可以轻松解决问题。

在表格中添加新列:

alter table table1 add column sync boolean default false;

在触发器功能集synctrue

create function on_update_table1()
...
--  update table1 on another server with dblink setting sync = true
...

使用条件创建触发器:

create trigger on_update_table1
after update on table1
for each row when (not new.sync)
execute procedure on_update_table1();

仅当来自其他服务器的触发器未执行更新时才会触发该触发器。

但请注意,在提议的同步方法中,您可以遇到更难的问题。特别是,您应该知道如何解决两台服务器上同一行的同时更改冲突。只有在设计时消除了这些冲突,或者您必须实现自己的锁定系统时,才能应用同步,这可能是一个相当复杂的问题。

相关问题