postgresql - 使用 DBlink 同步 postgres 中的两个表

标签 postgresql dblink

我想在两个不同的服务器(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/

相关文章:

postgresql - 即使扩展名已经存在,dblink 也不存在?

sql - 使用 row_to_json 的 Postgres 递归查询

postgresql - Spring JPA : Update entity with updated child entities

mysql - 使用自动增量从 MySQL 迁移到 Postgresql - 如何?

mysql - 创建 Oracle DBlink 以从 MySql 获取数据

postgresql - 将连接查询从数据库复制到另一个数据表

php - Postgre SQL + PHP 在 fieldv int4 上返回字符串类型的数据

postgresql - JPA 3 Hibernate + PostgreSQL 9.6.3 查询中出现限制错误

postgresql - 如何正确使用 dblink_build_sql_insert (postgreSQL)

database - PLS-00352 和 PLS-00201 通过 DB 链接