我正在尝试在 Debian 9 和 PG 11.1 的 2 个云实例之间设置逻辑复制。命令CREATE PUBLICATION
在 master 上成功了,但是当我启动命令时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 次,但它们总是被提交。所以不应该有任何长时间未提交的事务。
我尝试用谷歌搜索这个问题,但没有找到任何东西。我缺少什么?
由于数据库位于“云中”,因此您不知道它们到底在哪里。
很可能它们实际上位于同一个数据库集群中,这可以解释您看到的死锁:CREATE SUBSCRIPTION
等到包含复制源数据库的集群上的所有并发事务都完成后,它才能创建其复制槽,但由于两个数据库位于同一集群中,因此它会等待自己完成,这显然不会发生。
解决方案是在源数据库中显式创建一个逻辑复制槽,并在创建订阅时使用该现有槽。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)