postgresql - PostgreSQL 13.3 逻辑复制不会在主服务器中创建复制槽
问题描述
我是 PostgreSQL 的新手。我正在尝试创建位于同一 localhost 和端口中的 2 个数据库的逻辑复制(我不知道这是否是我遇到的问题的一部分)。关键是,我创建发布没有问题,但是,在我创建订阅的那一刻,必须在主服务器中创建的复制槽不会创建。我有wal_level = logical
,但我不知道是否需要在postgres.conf
or中进行其他配置pg_hba
另一个细节是我无法通过代码创建订阅,Postgres 只是没有响应,就像卡在那里一样,没有显示任何错误消息或确认。我可以创建订阅的唯一方法是在 pgAdmin 4 中,但这里出现了它没有创建复制槽的错误。
任何帮助建议都被接受。顺便说一句,对不起,如果我的英语有点糟糕,我希望我已经解释过了。
解决方案
您无法从代码创建订阅,因为当您使用 CREATE SUBSCRIPTION 创建复制槽(默认行为)时,无法在事务块内执行。
现在,在创建连接到同一数据库集群的订阅时(例如,在同一集群中的数据库之间进行复制或在同一数据库内进行复制)只有在复制槽不是作为同一命令的一部分创建时才会成功。否则,CREATE SUBSCRIPTION 调用将挂起。为了使这个工作,单独创建复制槽(使用函数 pg_create_logical_replication_slot 和插件名称 pgoutput)并使用参数 create_slot = false 创建订阅。这是一个实施限制,可能会在未来的版本中取消。
请参阅https://www.postgresql.org/docs/current/sql-createsubscription.html的注释部分
推荐阅读
- javascript - 我无法从服务器获得响应
- autodesk-forge - 未从 Autodesk Forge API 收到 Webhook 事件
- uipath-robot - 协调器中的 Uipath 机器人调度
- html - 如何将页面导航到不同语言的 ID?
- android - Mapbox 反向地理编码并不总是返回结果
- java - 如何在java中输入并打印整个字符串?
- c++ - 如何将 GDI 位图转换为 GDI+ 位图、DrawImage?
- shell - 无法在 Jenkins 管道中执行“sh”命令
- r - 拟合游戏的一阶导数和置信区间
- python - 如何获得输入值的平均值、最高和最低值