首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL逻辑复制-创建订阅挂起

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

Stack Overflow用户
提问于 2019-01-15 00:03:34
回答 1查看 1.2K关注 0票数 3

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

在主服务器上,我可以看到复制槽已创建并处于活动状态,我可以看到一个新的walsender进程已创建并处于“等待”状态,在主服务器上的日志中,我可以看到以下行:

代码语言:javascript
复制
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个,但它们都是提交的。因此,不应该有任何长时间未提交的事务。

我试着在谷歌上搜索这个问题,但没有找到任何东西。我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-15 17:39:12

因为数据库“在云中”,所以你不知道它们到底在哪里。

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

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54185023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档