Bilgi Bankası
PostgreSQLGöç ve cutover 15 dk 14.06.2026

PostgreSQL CDC cutover: logical replication ile kesintiyi nasıl azaltırsınız?

PostgreSQL CDC göçü, “bir gece kapatalım, dump alalım” seçeneğinden daha zarif olabilir; ama sadece doğru hazırlandıysa. Logical replication ilk kopyayı alır, değişiklikleri akıtır ve cutover anındaki farkı küçültür. Bu yazı o farkı güvenle sıfıra yaklaştırmanın pratiğini anlatır.

Bu yazı sana şu durumda yardımcı olur
  • PostgreSQL veritabanını taşımak istiyorsunuz ama uzun kesinti istemiyorsunuz
  • kaynak veritabanında yazma trafiği devam ediyor
  • wal_level, publication veya replication yetkileri kafanızı karıştırıyor
  • cutover anında hangi lag değerinin kabul edilebilir olduğunu bilmiyorsunuz
  • CDC çalışıyor ama ne zaman uygulamayı hedefe çevireceğiniz belirsiz
Yazıyı bitirince

PostgreSQL CDC için kaynak gereksinimlerini, lag takibini, cutover sırasını ve başarısızlık halinde geri dönüş kararını daha net kurabileceksiniz.

TürkDB açısından ürünleşme notu

Bu bölüm, TürkDB’nin ilgili problemi hangi ürün ilkeleri ve kontrol noktalarıyla ele alacağını anlatır. Kapsam, gerçek iş yükü ve ihtiyaçla birlikte netleşir.

TürkDB migration-runner için hedeflenen PostgreSQL CDC yaklaşımı native logical replication üzerine kurulabilir. Kaynakta publication ve hedefte subscription akışı pilotta doğrulanmalı; doğru cutover kararı için lag ve uygulama yazma penceresi yine iş bağlamıyla birlikte okunmalıdır.

CDC neyi çözer, neyi çözmez?

CDC, kaynak veritabanında değişen satırların hedefe akmasını sağlar. Böylece ilk büyük kopya bittikten sonra hedef sistem kaynağa yetişmeye çalışır ve cutover anındaki kesinti küçülür.

Ama CDC her şeyi çözmez. Şema uyumsuzluğu, uygulama bağlantı dizesi değişimi, kullanıcı yetkileri, sequence değerleri ve son doğrulama hâlâ sizin planınızın parçasıdır. CDC yalnızca veri farkını azaltır; cutover disiplinini ortadan kaldırmaz.

  • Kaynak PostgreSQL logical replication desteklemeli.
  • wal_level logical olmalı.
  • Publication oluşturma yetkisi gerekir.
  • Hedefin kaynağa ağ erişimi olmalıdır.
  • Cutover öncesi replication lag izlenmelidir.

Kaynakta neye bakılır?

Göç başlamadan önce kaynak veritabanının logical replication için uygun olup olmadığını görmek gerekir. Bu noktada sorun çıkarsa cutover günü değil, hazırlık gününde çıkması iyidir.

Logical replication ön kontrolü

postgres-cdc-preflight.sql
SHOW wal_level;
SHOW max_replication_slots;
SHOW max_wal_senders;

SELECT rolname, rolreplication
FROM pg_roles
WHERE rolname = current_user;

Publication örneği

publication.sql
CREATE PUBLICATION turkdb_migration_pub FOR ALL TABLES;

SELECT pubname, puballtables
FROM pg_publication
WHERE pubname = 'turkdb_migration_pub';

Gerçek migration-runner kendi publication adını üretir; bu örnek mantığı göstermek içindir.

Lag sıfıra yaklaşmadan cutover yapmayın

Cutover kararı çoğu zaman teknik değil, iş kararıdır. Lag birkaç saniyeyse ve uygulama kısa süre yazmayı durdurabiliyorsa kesinti küçük kalır. Lag dakikalara çıkıyorsa önce neden yetişemediğini anlamak gerekir: büyük transaction, indeks eksikliği, ağ gecikmesi veya hedef kapasitesi.

İyi cutover akışı genellikle şudur: uygulamayı bakım moduna alın, yeni yazmayı durdurun, son lag değerini bekleyin, doğrulama sorgularını çalıştırın, uygulamayı hedef DSN’e çevirin, hataları izleyin.

Subscription durumunu okuma

subscription-status.sql
SELECT
  subname,
  pid,
  received_lsn,
  latest_end_lsn,
  latest_end_time
FROM pg_stat_subscription;

Cutover anı karar notu

cutover-decision.txt
cutover_icin_hazir =
  yeni_yazma_durdu &&
  replication_lag_kabul_edilebilir &&
  kritik_tablo_sayimlari_eslesiyor &&
  hedef_dsn_uygulamada_hazir &&
  rollback_penceresi_tanimli

Cutover sonrası unutulan küçük şeyler

PostgreSQL göçlerinde veri taşındıktan sonra bile küçük farklar sorun çıkarabilir. Sequence değerleri, extension durumu, kullanıcı yetkileri, connection pool ayarları ve uygulama migrationlarının hedefteki etkisi kontrol edilmelidir.

TürkDB hedefinde bağlantı, TLS, yedek ve PITR zemininin hedef clusterla birlikte gelmesi gerekir. Bu davranış pilotta doğrulanmalı; uygulama kodunun hedefe geçiş davranışını ve veri doğrulamasını yine sizin iş akışınız belirler.

Sequence değerlerini hızlı kontrol etme fikri

sequence-check.sql
SELECT
  schemaname,
  sequencename,
  last_value
FROM pg_sequences
WHERE schemaname NOT IN ('pg_catalog', 'information_schema')
ORDER BY schemaname, sequencename;
Devam etmek istersen

Sorunu motor bazında derinleştirin

Benzer belirtiler farklı motorlarda farklı nedenlere dayanır; yayınlanan tüm rehberleri ana sayfadan takip edebilirsiniz.

Tüm makaleler