Postgresql 使用DBlink同步postgres中的两个表
我希望在两个不同的服务器(server1和server2)中有两个同步的DB,因此:Postgresql 使用DBlink同步postgres中的两个表,postgresql,dblink,Postgresql,Dblink,我希望在两个不同的服务器(server1和server2)中有两个同步的DB,因此: server1中的table1在server1中的table1更新server2中的table1 变化 及 server2中的table1在server2中的table1更新时更新server1中的table1 变化 通过这种方式,当从两台服务器更新时,我可以同步两个表,我成功地使用DBlink从server1更新到server2,没有任何问题 有什么问题?当两个表都启用了触发器时,它会创建一个无限循环
- server1中的table1在server1中的table1更新server2中的table1 变化
- server2中的table1在server2中的table1更新时更新server1中的table1 变化
谢谢。通过表1中的一个附加字段(标志)和一个有条件执行的触发器,这个问题很容易解决 将新列添加到表中:
alter table table1 add column sync boolean default false;
在触发功能中,将sync
设置为true
:
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();
只有当来自另一台服务器的触发器未执行更新时,才会触发该触发器
但是请注意,在建议的同步方法中,您可能会遇到更困难的问题。特别是,您应该知道如何解决两台服务器上同时更改同一行的冲突。只有在设计时消除了此类冲突,或者必须实现自己的锁定系统时,才能应用同步,这可能是一个相当复杂的问题