postgresql 逻辑复制 - 无法删除订阅

bio*_*ios 2 postgresql

在测试不同的场景时,我按照建议运行:

alter subscription mysub set (slot_name = NONE);

drop subscription mysub;
Run Code Online (Sandbox Code Playgroud)

我现在收到一个错误:

postgres=# select pg_drop_replication_slot('mysub');
ERROR:  replication slot "mysub" does not exist

postgres=# create subscription mysub connection 'host=192.168.1.140 port=5432 user=postgres dbname=postgres' publication mypub, insert_only;
ERROR:  could not create replication slot "mysub": ERROR:  replication slot "mysub" already exists

postgres=# drop subscription mysub;
ERROR:  subscription "mysub" does not exist
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

Lau*_*lbe 6

复制槽是在主节点上创建的,因此您尝试将其删除到备用节点上不会产生任何效果并会导致错误。

连接到主节点以删除复制槽。

由于您未能删除复制槽,因此创建具有相同名称(以及复制槽)的新订​​阅失败也就不足为奇了。

要查找复制槽,请在主节点上运行以下命令:

SELECT * FROM pg_replication_slots;
Run Code Online (Sandbox Code Playgroud)

这使您可以看到所有复制槽。然后删除相关的槽:

SELECT * FROM pg_drop_replication_slot('ENTER SLOT NAME HERE');
Run Code Online (Sandbox Code Playgroud)


小智 5

您必须首先按名称禁用您的订阅。

postgres=#\d reportcenter;
reportcenter=# ALTER SUBSCRIPTION mysub DISABLE;
reportcenter=# ALTER SUBSCRIPTION mysub SET (slot_name=NONE);
reportcenter=# DROP SUBSCRIPTION mysub;
Run Code Online (Sandbox Code Playgroud)

https://dba.stackexchange.com/questions/207653/cannot-drop-database-with-logical-replication?answertab=votes#tab-top