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

Jos*_*Mac 6 postgresql logical-replication

我正在尝试在 Debian 9 和 PG 11.1 的 2 个云实例之间设置逻辑复制。主服务器上的命令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.
Run Code Online (Sandbox Code Playgroud)

但仅此而已。命令CREATE SUBSCRIPTION永远不会结束。

Master 是一个插入量很大的数据库,比如每分钟 100 次,但它们总是被提交。所以不应该有任何长时间未提交的事务。

我尝试用谷歌搜索这个问题,但没有找到任何东西。我缺少什么?

Lau*_*lbe 6

由于数据库位于云\xe2\x80\x9d 中\xe2\x80\x9d,因此您不知道它们真正在哪里。

\n

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

\n

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

\n