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

  1. 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;
    
  2. 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');
    
  3. 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');
    
  4. 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;
    
  5. 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 yoksa postgresql-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!