Anasayfa » PostgreSQL Logical Replication

PostgreSQL Logical Replication

postgresql-logical-replication

PostgreSQL Logical Replication, seçtiğiniz tabloları gerçek zamanlı olarak başka bir PostgreSQL sunucusuna aktarır. Bu güçlü özellik sayesinde verilerinizi esnek ve kontrollü bir şekilde çoğaltabilirsiniz. Bu yazıda, PostgreSQL’de logical replication kurulumunu adım adım açıklıyoruz. Ayrıca süreci daha anlaşılır hale getirmek için örnek SQL komutlarıyla destek sunuyoruz.

🔗 PostgreSQL Logical Replication Documentation

Logical Replication Nedir?

Logical replication, veriyi fiziksel seviyede değil; tam tersine, mantıksal düzeyde kopyalar. Özellikle tablo bazlı çoğaltma imkanı sayesinde belirli tabloları başka bir veritabanına eş zamanlı olarak taşıyabilirsiniz. Bu yöntem, yalnızca yedekleme amacıyla değil; aynı zamanda veri analitiği sunucusu kurarken veya veri dağıtımı gerçekleştirirken de oldukça faydalı olur.

Sonuç olarak, logical replication sayesinde PostgreSQL ortamınızda yüksek esneklik ve ölçeklenebilirlik elde edebilirsiniz. Üstelik bu yapılandırma, sistem kaynaklarını daha verimli kullanmanızı sağlar.

1. Kaynak Veritabanı (Publisher) Ayarları

Replikasyon Kullanıcısı Oluşturma

İlk olarak, sadece replication işlemleri için kullanılacak özel bir kullanıcı oluşturalım:

CREATE USER rep_user WITH PASSWORD 'password' REPLICATION IN ROLE pg_read_all_data;

Açıklama: Bu kullanıcı, sadece belirli verileri okuma ve replikasyon işlemleri için yetkilidir. Güvenlik açısından bu tür kullanıcılar sınırlı yetkilerle oluşturulmalıdır.

Replike Edilecek Tabloyu Oluşturma

CREATE TABLE atfatmc_1 (
    id SERIAL, 
    value CHAR(33), 
    PRIMARY KEY(value)
);

Not: Replikasyon yapılacak tablo mutlaka bir primary key içermelidir. Aksi takdirde replication çalışmaz.

Test Verisi Ekleme

INSERT INTO atfatmc_1 
SELECT generate_series(1,1000), md5(md5(random()::text));

Publication Oluşturma

CREATE PUBLICATION test_pub FOR TABLE public.atfatmc_1;

Alternatif olarak, önce boş bir publication oluşturup tabloyu sonradan da ekleyebilirsiniz:

CREATE PUBLICATION test_pub;
ALTER PUBLICATION test_pub ADD TABLE public.atfatmc_1;

✅ Publication Kontrolleri:

SELECT * FROM pg_catalog.pg_publication;
SELECT * FROM pg_catalog.pg_publication_tables WHERE pubname='test_pub';

2. Hedef Veritabanı (Subscriber) Ayarları

Hedef Tablonun Oluşturulması

Hedef veritabanında da birebir aynı tabloyu oluşturmanız gerekir:

CREATE TABLE atfatmc_1 (
    id SERIAL, 
    value CHAR(33), 
    PRIMARY KEY(value)
);

⚠️ Dikkat: Tablonun yapısı birebir aynı olmalıdır. Aksi takdirde duplicate veya yapı uyuşmazlığı hataları alırsınız.

Subscription Oluşturma

CREATE SUBSCRIPTION test_subscription 
CONNECTION 'dbname=project host=192.168.116.131 port=5432 user=rep_user password=password' 
PUBLICATION test_pub;

Bu komutla hedef veritabanı artık kaynak veritabanındaki yayınlanan veriyi almaya başlayacak.

Publication Güncellenince Subscription Yenileme

Eğer yeni tablolar publication’a eklendiğinde aşağıdaki komutla subscription’ı güncellemelisiniz:

ALTER SUBSCRIPTION test_subscription REFRESH PUBLICATION;

Subscription Durumu Kontrol:

SELECT * FROM pg_catalog.pg_subscription;

3. Replikasyon Slot ve Durum Kontrolleri

SELECT * FROM pg_catalog.pg_replication_slots;

Ayrıca aktif replikasyon oturumlarını görmek için:

SELECT * FROM pg_catalog.pg_stat_replication;

Sık Yapılan Hatalar ve İpuçları

  • Şifreleme & Güvenlik: Replikasyon kullanıcısının şifresi güçlü olmalı, bağlantılar SSL ile yapılmalı.
  • Tablo Eşleşmesi: Tabloların yapısı birebir aynı olmalı.
  • Primary Key Zorunluluğu: Replikasyon yapılacak tablolarda primary key olmalıdır.
  • Subscription Güncelleme: Yeni tablo eklenirse REFRESH PUBLICATION unutulmamalıdır.

Sonuç

PostgreSQL Logical Replication, esnek yapısı ve gerçek zamanlı veri çoğaltma kabiliyetiyle oldukça güçlü bir özelliktir. Bu rehberde öğrendiğiniz adımlarla farklı veritabanları arasında veri senkronizasyonunu kolayca gerçekleştirebilirsiniz.

Diğer yazılar için PostgreSQL kategorimize göz atabilirsiniz. Tıklayın

More Reading

Post navigation

Leave a Comment

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir