Eliminar una suscripción y limpiar un slot lógico huérfano en el publicador
PostgreSQLReplicación lógicaComando
-- 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.
Relacionado
- Añadir una tabla a una publicación y refrescar la suscripción (REFRESH PUBLICATION)
- Monitorear la replicación lógica (pg_stat_subscription, errores de apply, lag de slots)
- Resolver un conflicto de replicación lógica (disable_on_error, SKIP)
- Sincronizar los valores de las secuencias en el suscriptor en la replicación lógica