Удалить подписку и очистить осиротевший логический слот на издателе
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.
Связанные материалы
- Добавить таблицу в публикацию и обновить подписку (REFRESH PUBLICATION)
- Мониторинг логической репликации (pg_stat_subscription, ошибки apply, отставание слота)
- Разрешить конфликт логической репликации (disable_on_error, SKIP)
- Синхронизировать значения последовательностей на подписчике при логической репликации