DBAtlas · Veritabanı operasyon atlası

Logical replication'da sequence değerlerini subscriber'a eşitle

PostgreSQLLogical Replication

Komut

# Publisher'da setval betiğini üret, subscriber'da uygula (cutover'da yazmalar durdurulduktan sonra):
psql -h <publisher_host> -d <db> -XAtc "SELECT format('SELECT setval(%L, %s, %s);', quote_ident(schemaname) || '.' || quote_ident(sequencename), COALESCE(last_value, start_value), (last_value IS NOT NULL)::text) FROM pg_sequences;" | psql -h <subscriber_host> -d <db> -X

Ne yapar?

Logical replication sequence (identity dahil) değerlerini taşımadığı için publisher'daki her sequence'ın son değerini okuyup subscriber'da aynı değeri setval ile ayarlayan komutları üretir ve doğrudan uygular.

Ne zaman kullanılır?

Logical replication ile sürüm yükseltme/migrasyon cutover'ında, uygulamayı subscriber'a yönlendirmeden hemen önce.

Dikkat

Publisher'a yazma sürerken çalıştırılırsa değerler hemen eskir ve cutover sonrası duplicate key hatası alınır; yazmaları durdurduktan sonra çalıştır veya güvenlik payı ekle. DDL de replike edilmez: şema değişikliklerini (ALTER TABLE, yeni index) iki tarafa ayrıca uygula, önce subscriber'a. pg_sequences, okuma yetkin olmayan sequence'lar için last_value'yu NULL döndürür; komutu sahip veya superuser ile çalıştır.

DBAtlas'ta aç →

İlgili