Bisakah Anda Melakukan Query Lintas Database dengan PostgreSQL? Begini Caranya!

Jika Anda sedang bekerja dengan PostgreSQL, Anda mungkin bertanya-tanya apakah memungkinkan untuk melakukan query lintas database. Ini biasanya muncul ketika Anda perlu mengakses atau memanipulasi data yang terpartisi di berbagai database. Situasi umum adalah ketika dua database berbagi data tetapi diatur secara terpisah—membuat kita bertanya: Bisakah Anda melakukan query satu database dari database lainnya di PostgreSQL?

Tantangan Query Lintas Database

Anda mungkin akan menemukan pesan kesalahan serupa ini saat mencoba mengeksekusi query lintas database:

databaseA=# select * from databaseB.public.someTableName;
ERROR:  referensi lintas database tidak diimplementasikan: "databaseB.public.someTableName"

Kesalahan ini menunjukkan bahwa PostgreSQL tidak secara native mendukung referensi langsung antar database. Oleh karena itu, jika data Anda disimpan di database yang terpisah dan Anda perlu melakukan query di antara mereka, Anda memerlukan solusi alternatif.

Solusi: Menggunakan Foreign Data Wrappers

Untuk melakukan query lintas database di PostgreSQL, Anda dapat memanfaatkan fitur foreign data wrapper, khususnya postgres_fdw. Ini memungkinkan Anda untuk dengan mudah terhubung ke tabel di database PostgreSQL mana pun, apakah itu lokal atau jarak jauh.

Mengatur postgres_fdw

  1. Instal Ekstensi: Pastikan ekstensi postgres_fdw diaktifkan dalam instalasi PostgreSQL Anda. Anda dapat membuat ekstensi dengan perintah berikut:

    CREATE EXTENSION postgres_fdw;
    
  2. Definisikan Server Asing: Buat server asing yang terhubung ke database target:

    CREATE SERVER foreign_server_name
    FOREIGN DATA WRAPPER postgres_fdw
    OPTIONS (host 'host_address', dbname 'databaseB', port '5432');
    
  3. Buat Pemetaan Pengguna: Anda perlu membuat pemetaan untuk pengguna agar dapat terhubung ke server asing:

    CREATE USER MAPPING FOR local_user
    SERVER foreign_server_name
    OPTIONS (user 'remote_user', password 'remote_password');
    
  4. Impor Skema Asing: Anda dapat mengimpor skema asing yang berisi tabel yang ingin Anda akses:

    IMPORT FOREIGN SCHEMA public
    FROM SERVER foreign_server_name
    INTO local_schema;
    
  5. Query Tabel Jarak Jauh: Sekarang Anda dapat melakukan query pada tabel asing seperti tabel lokal biasa:

    SELECT * FROM local_schema.some_table_name;
    

Untuk Versi PostgreSQL yang Lebih Lama

Jika Anda kebetulan menggunakan versi PostgreSQL sebelum 9.3, fitur foreign data wrapper tidak tersedia. Namun, Anda dapat menggunakan fungsi dblink, yang memungkinkan Anda terhubung ke database PostgreSQL lainnya.

  • Menggunakan dblink: Anda perlu menginstal paket postgresql-contrib jika paket tersebut belum menjadi bagian dari distribusi Anda. Kemudian Anda dapat mengeksekusi query seperti ini:
    SELECT * FROM dblink('dbname=databaseB user=remote_user password=remote_password',
                        'SELECT * FROM public.some_table_name') AS t(column1 type1, column2 type2, ...);
    

Catatan: Selalu pertimbangkan untuk merestruktur database Anda jika memungkinkan. Menggunakan schemas dalam database yang sama alih-alih database terpisah dapat sangat meningkatkan manajemen data dan aksesibilitas.

Kesimpulan

Meskipun PostgreSQL tidak secara native mendukung query lintas database, penggunaan foreign data wrappers seperti postgres_fdw memberikan solusi yang kuat. Dengan mengatur konfigurasi yang diperlukan, Anda dapat dengan mudah mengakses dan memanipulasi data di berbagai database.

Jika Anda menggunakan versi yang lebih lama, ingatlah bahwa meskipun dblink adalah pilihan, meningkatkan ke versi terbaru PostgreSQL dapat memberikan funkționalitas dan dukungan yang lebih baik.

Dengan alat dan strategi yang tepat, mengakses data di berbagai database menjadi lebih mudah dari sebelumnya. Selamat melakukan query!