DBAtlas · 数据库运维图谱

删除订阅并清理发布端的孤立逻辑复制槽

PostgreSQL逻辑复制

命令

-- Subscriber: while the publisher is unreachable DROP SUBSCRIPTION cannot drop the remote slot and fails; detach the slot first:
ALTER SUBSCRIPTION sub_app DISABLE;
ALTER SUBSCRIPTION sub_app SET (slot_name = NONE);
DROP SUBSCRIPTION sub_app;
-- Publisher: find and drop orphaned logical slots (including tablesync slots pg_<suboid>_sync_<relid>_<sysid>):
SELECT slot_name, active, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) AS retained_wal FROM pg_replication_slots WHERE slot_type = 'logical' AND NOT active;
SELECT pg_drop_replication_slot('sub_app');

作用

在不触及远程复制槽的情况下删除订阅(slot_name = NONE);然后查找并删除发布端已没有消费者的逻辑复制槽以及残留的 tablesync 复制槽。

适用场景

当发布端不可达时必须删除订阅、迁移完成后,或者 active = false 的逻辑复制槽在发布端堆积 WAL 时。

注意

孤立的逻辑复制槽会同时保留 WAL 和 catalog_xmin:磁盘被填满,系统目录膨胀。但删除复制槽后,该订阅将无法继续;删除前请确认没有任何订阅者(包括其他服务器上的)使用此复制槽。活动的复制槽无法删除;必须先终止已连接的 walsender。

在 DBAtlas 中打开 →

相关内容