3

我正在尝试使用 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 次,但它们总是被提交。所以不应该有任何长时间未提交的事务。

我试图用谷歌搜索这个问题,但没有找到任何东西。我错过了什么?

4

1 回答 1

4

由于数据库在“云中”,因此您不知道它们的真正位置。

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

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

于 2019-01-15T09:39:11.923 回答