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
-
Instal Ekstensi: Pastikan ekstensi
postgres_fdw
diaktifkan dalam instalasi PostgreSQL Anda. Anda dapat membuat ekstensi dengan perintah berikut:CREATE EXTENSION postgres_fdw;
-
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');
-
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');
-
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;
-
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 paketpostgresql-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!