PostgreSQL 逻辑复制 - 创建订阅挂起

PostgreSQL logical replication - create subscription hangs

我正在尝试在使用 Debian 9 和 PG 11.1 的 2 个云实例之间设置逻辑复制。 master 上的命令 CREATE PUBLICATION 成功,但是当我在预期的逻辑副本上启动命令 CREATE SUBSCRIPTION 时,该命令无限期挂起。

在主服务器上,我可以看到复制槽已创建并处于活动状态,我可以看到创建了一个新的 walsender 进程,"waiting"在主服务器的日志中,我看到了这些行:

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 解决这个问题,但没有找到任何东西。我错过了什么?

由于数据库“在云端”,您不知道它们的真实位置。

很可能它们实际上位于同一个数据库集群中,这可以解释您看到的死锁:CREATE SUBSCRIPTION 等待直到包含复制源数据库的集群上的所有并发事务完成,然后才能创建它的复制槽,但由于两个数据库都在同一个集群中,它等待自己完成,这显然不会发生。

解决方案是在源数据库中显式创建逻辑复制槽,并在创建订阅时使用该现有槽。