我正在尝试使用Debian 9和PG 11.1在两个云实例之间设置逻辑复制。主服务器上的命令CREATE PUBLICATION成功,但当我在目标逻辑副本服务器上启动命令CREATE SUBSCRIPTION时,该命令无限期挂起。
在主服务器上,我可以看到复制槽已创建并处于活动状态,我可以看到一个新的walsender进程已创建并处于“等待”状态,在主服务器上的日志中,我可以看到以下行:
2019-01-14 14:20:39.924 UTC [8349] repl_user@db LOG: logical decoding found initial starting point at 7B0/6C777D10
2019-01-14 14:20:39.924 UTC [8349] repl_user@db DETAIL: Waiting for transactions (approximately 2) older than 827339177 to end.但仅此而已。命令CREATE SUBSCRIPTION永远不会结束。
Master是一个有大量插入的数据库,比如每分钟100个,但它们都是提交的。因此,不应该有任何长时间未提交的事务。
我试着在谷歌上搜索这个问题,但没有找到任何东西。我遗漏了什么?
发布于 2019-01-15 17:39:12
因为数据库“在云中”,所以你不知道它们到底在哪里。
很可能它们实际上在同一个数据库集群中,这可以解释您看到的死锁:CREATE SUBSCRIPTION等待包含复制源数据库的集群上的所有并发事务完成,然后才能创建它的复制槽,但是由于两个数据库都在同一个集群中,它会等待自己完成,这显然不会发生。
解决方案是在源数据库中显式创建逻辑复制槽,并在创建订阅时使用该现有槽。
https://stackoverflow.com/questions/54185023
复制相似问题