subscription 제거 및 publisher의 고아 logical slot 정리
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을 건드리지 않고 subscription을 삭제한다(slot_name = NONE). 이후 publisher에서 더 이상 소비자가 없는 logical slot과 남은 tablesync slot을 찾아 제거한다.
사용 시점
publisher에 접근할 수 없는 상태에서 subscription을 제거해야 할 때, 마이그레이션이 끝난 후, 또는 active = false인 logical slot이 publisher에 WAL을 쌓고 있을 때.
주의
고아 logical slot은 WAL과 catalog_xmin을 모두 보존하므로 디스크가 차고 시스템 카탈로그가 비대해진다. 그러나 slot을 삭제하면 해당 subscription은 재개할 수 없으므로 삭제 전에 이 slot을 사용하는 subscriber(다른 서버 포함)가 없는지 확인한다. 활성 slot은 삭제할 수 없으며 먼저 연결된 walsender를 종료해야 한다.