Subscription entfernen und verwaisten logischen Slot auf dem Publisher bereinigen
PostgreSQLLogische ReplikationBefehl
-- 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');Was es tut
Löscht die Subscription, ohne den Remote-Slot anzufassen (slot_name = NONE); sucht und entfernt dann logische Slots auf dem Publisher, die keinen Consumer mehr haben, sowie übrig gebliebene tablesync-Slots.
Wann einsetzen
Wenn eine Subscription entfernt werden muss, während der Publisher nicht erreichbar ist, nach Abschluss einer Migration oder wenn ein logischer Slot mit active = false auf dem Publisher WAL ansammelt.
Vorsicht
Ein verwaister logischer Slot hält sowohl WAL als auch catalog_xmin zurück: Die Platte läuft voll und die Systemkataloge blähen auf. Nach dem Löschen des Slots kann diese Subscription jedoch nicht fortgesetzt werden; prüfe vor dem Löschen, dass kein Subscriber (auch keiner auf einem anderen Server) diesen Slot nutzt. Ein aktiver Slot lässt sich nicht löschen; der verbundene walsender muss zuerst beendet werden.
Verwandte Einträge
- Tabelle zu einer Publication hinzufügen und Subscription aktualisieren (REFRESH PUBLICATION)
- Logische Replikation überwachen (pg_stat_subscription, Apply-Fehler, Slot-Lag)
- Konflikt in der logischen Replikation lösen (disable_on_error, SKIP)
- Sequence-Werte in der logischen Replikation zum Subscriber synchronisieren