サブスクリプションを削除し、パブリッシャ上の孤立した論理スロットをクリーンアップ
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を終了する必要がある。