我想在两个不同的服务器(server1和server2)中有两个同步数据库,所以:
- 当 server1 中的 table1 时,server1 中的 table1 更新 server2 中的 table1 变化
和
- 当 server2 中的 table1 时,server2 中的 table1 更新 server1 中的 table1 变化
这样我就可以在从两台服务器更新时同步两个表,我已经成功地使用 DBlink 从服务器 1 更新到服务器 2,没有出现任何问题。
有什么问题吗?当两个表都启用了触发器时,它会创建一个无限循环,因此 server1 变化,然后更新 server2,然后它更改并更新 server1 等等。 有没有办法在不出现此问题的情况下完成我需要的操作?
谢谢。
最佳答案
通过 table1 中的附加字段(标志)和条件执行触发器可以轻松解决该问题。
向表中添加新列:
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();
仅当来自其他服务器的触发器未执行更新时才会触发触发器。
但请注意,在建议的同步方法中,您可能会遇到更困难的问题。特别是,您应该知道如何解决两台服务器上同一行同时更改的冲突。只有在设计时消除此类冲突才能应用同步,否则您必须实现自己的锁定系统,这可能是一个相当复杂的问题。
关于postgresql - 使用 DBlink 同步 postgres 中的两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31929806/