DBAtlas · Atlas d'exploitation des bases de données

Supprimer une souscription et nettoyer un slot logique orphelin sur le publisher

PostgreSQLRéplication logique

Commande

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

Ce que fait la commande

Supprime la souscription sans toucher au slot distant (slot_name = NONE) ; puis trouve et supprime sur le publisher les slots logiques qui n'ont plus de consommateur, ainsi que les slots tablesync résiduels.

Quand l'utiliser

Lorsqu'une souscription doit être supprimée alors que le publisher est injoignable, après la fin d'une migration, ou lorsqu'un slot logique avec active = false accumule du WAL sur le publisher.

Attention

Un slot logique orphelin retient à la fois le WAL et catalog_xmin : le disque se remplit et les catalogues système gonflent. Cependant, supprimer le slot empêche cette souscription de reprendre ; avant de le supprimer, vérifiez qu'aucun subscriber (y compris sur un autre serveur) n'utilise ce slot. Un slot actif ne peut pas être supprimé ; le walsender connecté doit d'abord être terminé.

Ouvrir dans DBAtlas →

Voir aussi