PostgreSQL ile Çapraz Veritabanı Sorguları
Yapabilir misiniz? İşte Yol!
Eğer PostgreSQL ile çalışıyorsanız, çapraz veritabanı sorguları
yapmanın mümkün olup olmadığını merak edebilirsiniz. Bu genellikle, verilerin farklı veritabanları arasında bölündüğü durumlarda erişim veya veri manipülasyonu yapmanız gerektiğinde ortaya çıkar. İki veritabanının veri paylaştığı, ancak ayrı ayrı kurulduğu yaygın bir durum vardır—bu da şu soruyu gündeme getirir: PostgreSQL’de bir veritabanından diğerine sorgu yapabilir misiniz?
Çapraz Veritabanı Sorgularının Zorluğu
Çapraz veritabanı sorgusu çalıştırmaya çalıştığınızda size benzer bir hata mesajı ile karşılaşabilirsiniz:
databaseA=# select * from databaseB.public.someTableName;
ERROR: cross-database references are not implemented: "databaseB.public.someTableName"
Bu hata, PostgreSQL’in veritabanları arasında doğrudan referansları yerel olarak desteklemediğini gösterir. Bu nedenle, verileriniz ayrı veritabanlarında saklanıyorsa ve bunlar arasında sorgular yapmanız gerekiyorsa, alternatif bir çözüme ihtiyacınız olacak.
Çözüm: Yerli Veri Sarmalayıcıları Kullanmak
PostgreSQL’de çapraz veritabanı sorguları yapmak için yerli veri sarmalayıcı özelliğini, özellikle de postgres_fdw
kullanabilirsiniz. Bu, lokal veya uzak herhangi bir PostgreSQL veritabanındaki tablolara kolayca bağlanmanızı sağlar.
postgres_fdw
Kurulumu
-
Uzantıyı Yükleyin: PostgreSQL kurulumunda
postgres_fdw
uzantısının etkin olup olmadığını kontrol edin. Aşağıdaki komutla uzantıyı oluşturabilirsiniz:CREATE EXTENSION postgres_fdw;
-
Yerli Sunucu Tanımlayın: Hedef veritabanına bağlanan bir yerli sunucu oluşturun:
CREATE SERVER foreign_server_name FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'host_adresi', dbname 'databaseB', port '5432');
-
Kullanıcı Eşlemesi Oluşturun: Yerli kullanıcının yerli sunucuya bağlanması için bir eşleştirme oluşturmanız gerekecek:
CREATE USER MAPPING FOR local_user SERVER foreign_server_name OPTIONS (user 'remote_user', password 'remote_password');
-
Yerli Şemayı İçe Aktarın: Erişmek istediğiniz tabloları içeren yerli şemayı alabilirsiniz:
IMPORT FOREIGN SCHEMA public FROM SERVER foreign_server_name INTO local_schema;
-
Uzak Tabloyu Sorgulayın: Artık yerli tablolarmış gibi yabancı tablolara sorgu yapabilirsiniz:
SELECT * FROM local_schema.some_table_name;
Eski PostgreSQL Sürümleri İçin
Eğer PostgreSQL sürümünüz 9.3’ten önceyse, yerli veri sarmalayıcı özelliği mevcut değildir. Ancak, diğer PostgreSQL veritabanlarına bağlanmanızı sağlayan dblink
fonksiyonunu kullanabilirsiniz.
dblink
Kullanarak: Dağıtımınızda yoksapostgresql-contrib
paketini yüklemeniz gerekecek. Ardından, aşağıdaki gibi bir sorgu çalıştırabilirsiniz:SELECT * FROM dblink('dbname=databaseB user=remote_user password=remote_password', 'SELECT * FROM public.some_table_name') AS t(column1 type1, column2 type2, ...);
Not: Mümkünse veritabanlarınızı yeniden yapılandırmayı her zaman düşünün. Ayrı veritabanları yerine aynı veritabanı içinde
şemalar
kullanmak, veri yönetimini ve erişilebilirliği önemli ölçüde artırabilir.
Sonuç
PostgreSQL’in doğrudan çapraz veritabanı sorgularını desteklemediği doğru, ancak postgres_fdw
gibi yerli veri sarmalayıcıların kullanılması, etkili bir alternatif sunar. Gerekli yapılandırmaları ayarlayarak, farklı veritabanları arasında veri erişimini ve manipülasyonu sorunsuz bir şekilde gerçekleştirebilirsiniz.
Eski bir sürüm kullanıyorsanız, dblink
bir seçenek olsa da, PostgreSQL’in en son sürümlerine geçmenin daha iyi işlevsellik ve destek sağlayabileceğini unutmayın.
Doğru araçlar ve stratejilerle, veritabanları arasında veri erişimi her zamankinden daha kolaydır. İyi sorgular!