DBAtlas · Veritabanı operasyon atlası

Logical replication çakışmasını çöz (disable_on_error, SKIP)

PostgreSQLLogical Replication

Komut

-- 1) Hata alan apply worker'ın sonsuz döngüye girmesini engelle:
ALTER SUBSCRIPTION sub_app SET (disable_on_error = true);
-- 2) Subscriber logundan çakışan transaction'ın bitiş LSN'ini bul:
--    CONTEXT: ... in transaction 749, finished at 0/5035378
-- 3a) Tercih edilen: subscriber'daki çakışan satırı düzelt/sil, sonra yeniden etkinleştir:
ALTER SUBSCRIPTION sub_app ENABLE;
-- 3b) Ya da tüm uzak transaction'ı atla (içindeki TÜM değişiklikler subscriber'a uygulanmaz):
ALTER SUBSCRIPTION sub_app SKIP (lsn = '0/5035378');
ALTER SUBSCRIPTION sub_app ENABLE;
SELECT subname, subenabled, subskiplsn FROM pg_subscription;

Ne yapar?

Subscriber'da duplicate key, eksik satır, yetki gibi bir hata apply'ı durdurduğunda: disable_on_error subscription'ı otomatik devre dışı bırakır; çakışan veri düzeltilip ENABLE edilir ya da SKIP ile logdaki 'finished at' LSN'ine ait uzak transaction tamamen atlanır.

Ne zaman kullanılır?

Subscriber'a doğrudan yazılması, eksik ilk kopya veya iki yönlü yazma nedeniyle apply worker hata verip sürekli yeniden başladığında.

Dikkat

SKIP o transaction'daki çakışmayan değişiklikleri de atlar ve iki taraf kalıcı olarak ayrışır; mümkünse önce veriyi düzeltme yolunu seç, SKIP sonrası tabloyu karşılaştır. Çakışma çözülmeden publisher'daki slot WAL biriktirmeye devam eder. Subscriber tablolarına uygulamanın yazmasını yetkilerle engelle.

DBAtlas'ta aç →

İlgili