如何在Postgres上禁用复制槽(replication_slot)

8

是否有方法可以禁用特定的复制插槽?当我尝试删除它时,由于它处于活动状态,我得到了一个错误。


2
你用槽(slot)做什么?如果它用于逻辑复制,你需要禁用订阅。 - user330315
1
是的,它是为逻辑复制创建的,但当我进行订阅时出了点问题,现在我只有复制槽而没有订阅。因此,我需要仅删除复制槽。谢谢。 - Salvatore Tumminaro
1个回答

16
不,你需要在副本端将其关闭后再进行删除。如果你不能这样做,那么你必须终止WAL发送程序,然后在其重新启动之前删除插槽。由于这是一场竞赛,你应该安排在同一次按键上提交删除命令和终止命令。
select pg_drop_replication_slot('rep_slot');
    ERROR:  replication slot "rep_slot" is active for PID 162564
select pg_terminate_backend(162564); select pg_drop_replication_slot('rep_slot');

如果您能提供有关如何在副本端关闭它的详细信息,那么您的评论将更加有用。 - mvd
我不知道你想如何在副本端停止它,因为那不是我的副本。你可以关闭它、销毁它、从网络中驱逐它、将其提升为竞争主服务器、删除 primary_conninfo 并重新启动为仅进行日志传送的副本、取消订阅(尽管如果你这样做,它会为你删除插槽),或禁用订阅。也许这个副本甚至不是另一个 PostgreSQL 系统,那么你就有了一组不同的选项。 - jjanes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接