我正在尝试使用Debian 9和PG 11.1在2个云实例之间设置逻辑复制。 master上的命令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个,但是它们始终是固定的。因此,不应有任何长时间未提交的交易。
我尝试用Google搜索此问题,但未找到任何内容。我想念什么?
答案 0 :(得分:1)
由于数据库位于“云中”,因此您不知道它们的实际位置。
奇怪的是它们实际上在同一数据库集群中,这将解释您看到的死锁:CREATE SUBSCRIPTION
等待直到包含复制源数据库的集群上的所有并发事务完成后,才能创建复制插槽,但是由于两个数据库都在同一个群集中,因此它会等待自身完成,这显然不会发生。
解决方案是在源数据库中显式创建一个逻辑复制插槽,并在创建订阅时使用该现有插槽。