Subscription'ı kaldır ve publisher'da sahipsiz logical slot'u temizle
PostgreSQLLogical ReplicationKomut
-- Subscriber: publisher erişilemezken DROP SUBSCRIPTION uzak slot'u silemeyip hata verir; önce slot bağını kopar:
ALTER SUBSCRIPTION sub_app DISABLE;
ALTER SUBSCRIPTION sub_app SET (slot_name = NONE);
DROP SUBSCRIPTION sub_app;
-- Publisher: sahipsiz kalan logical slot'ları (tablesync slot'ları pg_<suboid>_sync_<relid>_<sysid> dahil) bul ve sil:
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');Ne yapar?
Subscription'ı uzak slot'a dokunmadan siler (slot_name = NONE); ardından publisher'da artık tüketicisi olmayan logical slot'ları ve kalan tablesync slot'larını bulup kaldırır.
Ne zaman kullanılır?
Publisher erişilemezken subscription kaldırılması gerektiğinde, migrasyon bittikten sonra veya publisher'da active = false bir logical slot WAL biriktirirken.
Dikkat
Sahipsiz logical slot hem WAL'ı hem catalog_xmin'i tutar: disk dolar ve sistem kataloglarında bloat oluşur. Ancak slot'u silmek o subscription'ın kaldığı yerden devamını imkansız kılar; silmeden önce hiçbir subscriber'ın (başka bir sunucudaki dahil) bu slot'u kullanmadığını doğrula. Aktif slot silinemez; önce bağlı walsender'ı sonlandırmak gerekir.