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

2024-04-30

我正在尝试在 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(使用前将#替换为@)

PostgreSQL 逻辑复制 - 创建订阅挂起 的相关文章

随机推荐