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 →

Связанные материалы