6/27/2019

Query Antar Server di PostgreSQL (dblink)

"Bagaimana ya cara nya insert data dari server A ke server B? kalau di insert satu persatu kan repot, hmm.."


Ya, itulah pikiran saya ketika dilema untuk memindahkan data dari server ke local saya. bisa sih pakai cara restore tabel, tapi gimana jadinya kalo tabel itu terdapat trigger ke tabel lain yang tidak bisa sembarangan data bisa di copy?

Maka dari itulah kita mesti tau cara mengakalinya selain pakai trigger kita juga bisa memanfaatkan extensi dblink atau database link. Oh ya, dalam kasus seperti itu kita mesti paham dulu ya, konsepnya disini kita menarik data dan bukan mengirim data. Karena yang kita pakai itu query insert dan select dengan menarik data dari server A dan di simpan ke server/local B. Kalau trigger kan sebaliknya.

Jadi apa itu dblink?
dblink atau database link adalah sebuah extensi untuk memfasilitasi client dalam mengakses satu server dengan server lainnya sebagai satu databaselogic yang memungkinkan jalur komunikasi satu arah pada database.
Lalu gimana langkah-langkahnya?
Oke kita akan bahas.

Pertama kita harus memastikan dulu, apakah server yang kita pakai sudah bisa terkoneksi dengan server lain?. Bisa dilihat di extensi "dblink" yang ada di database kita, baik di server maupun di local.
Jjika tidak ada, maka buat dahulu dblink nya :
CREATE EXTENSION dblink
SCHEMA public
VERSION "1.1";
Kedua kita harus memastikan field dari server dan local itu sama.
Ketiga kita buat query select nya dari local ke server. Perhatikan, form query yang digunakan adalah form dari local/server B.
Selanjutnya ketikan query berikut :

INSERT into tbn_menu
	SELECT *
		FROM dblink('hostaddr= dbname= user= password=', 
		'SELECT kode_menu,parent,nama_menu,link,last_update,update_by,urutan from tbn_menu')
	AS t1(
		kode_menu character(10),
		parent character(10),
		nama_menu character varying(225),
		link character varying(225),
		last_update date,
		update_by character varying(15),
		urutan integer
	)
where kode_menu not in (select kode_menu from tbn_menu)

Sebagai contoh saya pakai tabel master menu dengan primary key nya ialah kode_menu.
Perhatikan nomor yang saya buat:
1 : untuk host/ip database server A
2 : nama database di server A
3 : user database server A
4 : password database server A
5 : sebutkan field apasaja yang akan di simpan ke local/server B dan kondisi data mana yang akan diambil dari server A.
6 : mengantisipasi data double, maka harus kita filter berdasarkan kode menu agar data yang diambil dari server A hanya data yang benar-benar belum ada di local/server B.
Coba running.

Sekian.. 
Jika ada pertanyaan silahkan tinggalkan komentar.

Mulai menulis blog sejak tahun 2012. Saat ini sedang disibukkan dengan karir dibidang IT nya.

Komentar yang mengandung spam / link aktif akan secara otomatis disembunyikan. Mohon maaf atas ketidaknyamanan jika pertanyaan telat ataupun tidak terbalas karena keterbatasannya waktu. Silahkan hubungi kami di menu Contact Us. Terimakasih
EmoticonEmoticon