Büyük sistemlerde veya mikroservis mimarilerinde,
bazen farklı veritabanlarındaki verilere tek bir sorgu ile erişmemiz gerekebilir. Örneğin birden fazla veritabanındaki veriler bir sayfada beraber sunulduğunda, veriler arasından sıralama filtreleme gibi işlemlerin yapılması istendiğinde veri tutarlılığını da sağlamanın zor olduğu bir durumda veritabanlarını tek bir veritabanı gibi hareket etmesini sağlayarak birbirine bağlamak gerekebilir.
Bu durumda karşımıza çıkan popüler iki yöntemi ele alacağız:
Oracle tarafında “dblink” olarak bilinen yapı ve
PostgreSQL dünyasında “postgres_fdw” çözümleri
Bu yazıda, bu iki yaklaşımın ne olduğunu, nasıl çalıştığını, hangi senaryolarda tercih edilmesi gerektiğini ve aralarındaki performans farklarını örneklerle ele alacağız.
Son olarak da postgres_fdw’nin kurulumu ve kullanımına dair bir örnek paylaşacağız.
dblink Nedir?
dblink, bir veritabanından başka bir veritabanına bağlantı kurup,
oradaki verilere sorgu atmamızı sağlayan bir yapıdır. Bu özellik özellikle
Oracle veritabanlarında uzun süredir kullanılan klasik bir yöntemdir.
PostgreSQL’de de benzer bir modül olarak mevcuttur.
Bir veritabanından diğerine ağ üzerinden bağlantı kurulur.
Sorgu, hedef veritabanına gönderilir ve sonuçlar sorguyu başlatan veritabanına döner.
postgres_fdw Nedir?
postgres_fdw (Foreign Data Wrapper), PostgreSQL’in uzak veritabanlarındaki tabloları kullanabilmemizi sağlayan güçlü bir eklentisidir. FDW (Foreign Data Wrapper) mekanizması, PostgreSQL’in farklı veri kaynaklarını SQL üzerinden erişilebilir hale getiren yapısıdır. Bir “foreign server” tanımlanır, ardından uzak veritabanındaki tablolar “foreign table” olarak içeri alınır.
Artık bu tablolar yerel tablolar gibi sorgulanabilir.
🔹 Kurulum ve Kullanım:
-- 1️⃣ Veritabanında postgres_fdw aktf duruma getirilir.
CREATE EXTENSION postgres_fdw;
-- 2️⃣ Bağlanılan Sunucunun Tanımlamaları yapılır
CREATE SERVER remote_server
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host '192.168.1.10', dbname 'remotedb', port '5432');
-- 3️⃣ Yetki İçin Kullanıcı Bilgileri girilir.
CREATE USER MAPPING FOR current_user
SERVER remote_server
OPTIONS (user 'remote_user', password '1234');
-- 4️⃣ Uzak Tablada kullanılan veritabanı tanımlanır.
CREATE FOREIGN TABLE public.remote_employees (
id integer,
name text,
department text
)
SERVER remote_server
OPTIONS (schema_name 'public', table_name 'employees');
Sorgu ile veritabanı kullanılabilir:
SELECT * FROM remote_employees WHERE department = 'IT';
Bu sorgu aslında uzak veritabanına gider, ama PostgreSQL bunu yerel tabloymuş gibi işler.
Join, filtreleme, limit gibi işlemleri otomatik olarak optimize eder.
Veritabanlarını birbirine bağlamak, özellikle mikroservis mimarilerinde veya veri ambarı senaryolarında güçlü bir yetenektir. postgres_fdw gelişmiş sorgu optimizasyonu ve yönetim kolaylığı ile modern PostgreSQL projelerinde öne çıkar. postgres_fdw güncel bir yöntem olması sebebiyle performans gerektiren durumlarda tercih edilmesi gereken yöntemdir diyebiliriz. Eğer iki PostgreSQL veritabanı arasında sık sık sorgular çalıştırmanız gerekiyorsa sizin için en verimli çözüm olacaktır.