我们的逻辑复制已经开始失败,订阅服务器上出现了许多这样的错误:
ERROR: could not create replication slot
"pg_148211637_sync_148178452_7161337762731575223": ERROR: all replication slots are in use
May 2 07:43:01 psql-06 postgres[1195903]: [2] HINT: Free one or increase max_replication_slots.
May 2 07:43:01 psql-06 postgres[1181479]: [1] LOG: background worker "logical replication worker" (PID 1195903) exited with exit code 1
May 2 07:43:01 psql-06 postgres[1195905]: [1] LOG: logical replication table synchronization worker for subscription "sub_production", table "products" has started
May 2 07:43:01 psql-06 postgres[1195901]: [1] LOG: could not drop replication slot "pg_148211637_sync_148183118_7161337762731575223" on publisher: ERROR: replication slot "pg_148211637_sync_148183118_7161337762731575223" does not exist
它似乎一直在尝试删除发布服务器上的复制插槽pg_148211637_sync_148183118_7161337762731575223
,但不知何故它不存在?
这种情况是如何发生的?如何解决/恢复复制?
2条答案
按热度按时间u7up0aaq1#
连接到主服务器并在其中查找已放弃的复制插槽:
其中任何不属于备用服务器但仍需要的服务器都应该去:
如果需要10个以上的复制插槽,请在主服务器上增加
max_replication_slots
并重新启动它。很难说你是如何陷入困境的,但可能是这样的:只要您说
CREATE SUBSCRIPTION
,备用服务器就会连接到主服务器并创建一个逻辑复制插槽(除非您明确告诉它不要这样做)。如果创建订阅时出现问题,或者复制中断,则复制插槽仍在主服务器上。因此,可能需要多次失败的尝试才能使逻辑复制运行,而您忽略了在失败尝试后进行清理。lvmkulzt2#
你误解了错误。主要错误是无法创建插槽,因为所有允许的插槽都已在使用中。
但是复制副本随后尝试在其自身之后进行清理,其通过尝试丢弃其首先未能创建的槽来进行,这当然不起作用,因为没有什么可清理的。所以这部分失败了,但它不是整个失败中有趣的部分。