DBAtlas · Atlas de operaciones de bases de datos

Eliminar una suscripción y limpiar un slot lógico huérfano en el publicador

PostgreSQLReplicación lógica

Comando

-- 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');

Qué hace

Elimina la suscripción sin tocar el slot remoto (slot_name = NONE); después busca y elimina en el publicador los slots lógicos que ya no tienen consumidor, además de los slots de tablesync sobrantes.

Cuándo usarlo

Cuando hay que eliminar una suscripción con el publicador inaccesible, al terminar una migración, o cuando un slot lógico con active = false está acumulando WAL en el publicador.

Precaución

Un slot lógico huérfano retiene tanto WAL como catalog_xmin: el disco se llena y los catálogos del sistema sufren bloat. Sin embargo, eliminar el slot impide que esa suscripción continúe; antes de eliminarlo, verifique que ningún suscriptor (incluido uno en otro servidor) usa este slot. Un slot activo no se puede eliminar; primero hay que terminar el walsender conectado.

Abrir en DBAtlas →

Relacionado