PostgreSQL FDW ile Farklı Veritabanlarını Tek Bir Yerden Sorgulamak
🚀 Giriş
Mikroservis tabanlı sistemlerde her servis kendi veritabanına sahiptir. Bu mimari ölçeklenebilirliği artırsa da, zamanla farklı veritabanlarından veri toplama ihtiyacı doğar. PostgreSQL Foreign Data Wrapper (FDW) tam da bu noktada devreye girer.
FDW sayesinde yalnızca farklı PostgreSQL veritabanlarını değil; MSSQL, MySQL, Oracle gibi sistemleri de tek bir PostgreSQL üzerinden sorgulamak mümkündür. Yani başka bir sistemdeki tabloyu, kendi veritabanındaki bir tablo gibi kullanabilirsin.
🔍 FDW Nedir?
Foreign Data Wrapper (FDW), PostgreSQL 9.1 sürümünden itibaren sunulan bir eklentidir. Uzak veritabanlarındaki tabloları yerel veritabanına “foreign table” olarak bağlayarak, doğrudan sorgulama yapılmasını sağlar.
- Uzak veritabanındaki tabloyu PostgreSQL’e tanımlar,
- Yerel bir tablo gibi sorgulamanı sağlar,
SELECT,JOIN,WHEREgibi işlemleri destekler.
Böylece karmaşık veri entegrasyon süreçleri oldukça basitleşir.
🧠 Örnek Senaryo 1: Aynı Sunucuda İki PostgreSQL Veritabanı
Varsayalım ki aynı PostgreSQL sunucusunda iki veritabanın var: db_sales ve db_customers.
Raporlama yapmak için bu iki kaynaktan veri çekmen gerekiyor.
1️⃣ FDW uzantısını etkinleştir:
CREATE EXTENSION postgres_fdw;
2️⃣ Uzak veritabanını tanımla:
CREATE SERVER sales_server
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (dbname 'db_sales', host 'localhost');
3️⃣ Kullanıcı eşlemesini oluştur:
CREATE USER MAPPING FOR current_user
SERVER sales_server
OPTIONS (user 'sales_user', password 'StrongPass123');
4️⃣ Uzak tabloyu bağla:
CREATE FOREIGN TABLE sales_data (
id INT,
amount NUMERIC,
date DATE
)
SERVER sales_server
OPTIONS (schema_name 'public', table_name 'sales');
Artık SELECT * FROM sales_data; sorgusu, diğer veritabanındaki verileri getirecektir.
🌍 Örnek Senaryo 2: PostgreSQL ile MSSQL Arasında Köprü
FDW yalnızca PostgreSQL için değildir; tds_fdw uzantısı sayesinde MSSQL veritabanlarına da bağlanabilirsin.
1️⃣ Uzantıyı yükle:
CREATE EXTENSION tds_fdw;
2️⃣ MSSQL bağlantı bilgilerini tanımla:
CREATE SERVER mssql_server
FOREIGN DATA WRAPPER tds_fdw
OPTIONS (servername 'mssql.local', port '1433', database 'erp');
3️⃣ Kullanıcı eşlemesini yap:
CREATE USER MAPPING FOR current_user
SERVER mssql_server
OPTIONS (username 'sa', password 'StrongPass123');
4️⃣ MSSQL tablosunu PostgreSQL’e bağla:
CREATE FOREIGN TABLE fdw_products (
id INT,
name TEXT,
price NUMERIC
)
SERVER mssql_server
OPTIONS (schema_name 'dbo', table_name 'Products');
Bu yapı sayesinde MSSQL’deki tablolara PostgreSQL üzerinden doğrudan sorgular yazabilir, verileri filtreleyebilir veya join işlemleri gerçekleştirebilirsin.
⚙️ FDW Kullanmanın Avantajları
- Mikroservis entegrasyonu: Her servisin kendi veritabanına sahip olduğu yapılarda merkezi sorgulama sağlar.
- Veri bütünlüğü: Gerçek zamanlı veri erişimi sunar.
- Tek sorgu noktası: Farklı veritabanlarını tek PostgreSQL arayüzünden yönetebilirsin.
- Kolay bakım: ETL süreçleri yerine doğrudan veriyle çalışırsın.
⚠️ Dikkat Edilmesi Gerekenler
- Performans: Uzak sorgular yavaş olabilir; sadece gerekli sütunları çek.
- Güvenlik: Şifreleri açıkta tutmaktan kaçın.
- Uyumluluk: Her DBMS için farklı FDW eklentisi gerekebilir (
mysql_fdw,tds_fdw,oracle_fdwvb.). - Yönetim: Gerekirse
DROP SERVERveyaDROP FOREIGN TABLEkomutlarıyla kaldırabilirsin.
🧾 Sonuç
PostgreSQL FDW, farklı sistemlerdeki verileri tek bir noktada birleştirmek isteyenler için güçlü bir çözümdür. Aynı sunucuda ya da uzak sistemlerde olsun, FDW sayesinde tüm verilere tek bir PostgreSQL oturumu üzerinden erişebilirsin.
Eğer çoklu veritabanı yapısına sahip bir sistem geliştiriyorsan, FDW seni karmaşık veri kopyalama işlemlerinden kurtarır ve gerçek zamanlı entegrasyon sağlar. Kısacası: Veri her yerdeyse, FDW onu senin ayağına getirir.