Remover uma subscription e limpar um slot lógico órfão no publisher
PostgreSQLReplicação 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');O que faz
Remove a subscription sem tocar no slot remoto (slot_name = NONE); depois encontra e remove os slots lógicos no publisher que não têm mais consumidor, além de slots de tablesync remanescentes.
Quando usar
Quando uma subscription precisa ser removida com o publisher inacessível, após o fim de uma migração ou quando um slot lógico com active = false está acumulando WAL no publisher.
Atenção
Um slot lógico órfão retém tanto WAL quanto catalog_xmin: o disco enche e os catálogos do sistema incham. No entanto, remover o slot impede que aquela subscription continue; antes de remover, verifique que nenhum subscriber (incluindo um em outro servidor) usa este slot. Um slot ativo não pode ser removido; o walsender conectado deve ser encerrado antes.
Relacionados
- Adicionar uma tabela a uma publication e atualizar a subscription (REFRESH PUBLICATION)
- Monitorar a replicação lógica (pg_stat_subscription, erros de apply, lag de slot)
- Resolver um conflito de replicação lógica (disable_on_error, SKIP)
- Sincronizar valores de sequences com o subscriber na replicação lógica