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
等待直到包含复制源数据库的集群上的所有并发事务完成,然后才能创建它的复制槽,但由于两个数据库都在同一个集群中,它等待自己完成,这显然不会发生。
解决方案是在源数据库中显式创建逻辑复制槽,并在创建订阅时使用该现有槽。
我正在尝试在使用 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
等待直到包含复制源数据库的集群上的所有并发事务完成,然后才能创建它的复制槽,但由于两个数据库都在同一个集群中,它等待自己完成,这显然不会发生。
解决方案是在源数据库中显式创建逻辑复制槽,并在创建订阅时使用该现有槽。