Melakukan Sinkronisasi Data Dua Tabel yang Berada Pada Database yang Terpisah
Untuk melakukan hal ini, Kita bisa memanfaatkan trigger [1], DBLink [2] dan Function [3]. Berikut adalah contohnya :
CREATE EXTENSION dblink;
CREATE LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION sync_employeea_all() RETURNS trigger AS $$
BEGIN
IF tg_op = 'DELETE' THEN
perform dblink_connect('dbname=mdm host=localhost user=mdm password=rahasia');
perform dblink_exec('DELETE FROM employee_all WHERE id='||OLD.id||' ;');
perform dblink_disconnect();
RETURN OLD;
END IF;
IF tg_op = 'INSERT' THEN
perform dblink_connect('dbname=mdm host=localhost user=mdm password=rahasia');
perform dblink_exec('INSERT INTO employee_all(id, org_unit_code, employee_id, other_id, fullname,
gelar_depan, gelar_belakang, nickname, gender, placeofbirth,
dateofbirth, pension_date, maritalstatusid, karpeg, karis,
askes, taspen, npwp, nation_id, myaddress, kal_id, kec_id,
kode_kota, province_code, country_code, postal_code,
rt, rw, phone, email, fax, mobile, height, weight, blood_id,
hair_id, face_id, skin_id, disability, characteristic,
hoby, employed_date, status_id, emp_type, tipe_pegawai,
tipe_pegawai_status, functional, picturefile, die_date,
non_active, modified_by, modified_date, agama_id,
email_standard, email_tambahan, email_pribadi, question_id,
answer, role_id, username, nip, status, picturefile2,
status_sivitas_id, status_aktif_sivitas_id)
VALUES('||NEW.id||', '''||NEW.org_unit_code||''', '''||NEW.employee_id||''', '''||NEW.other_id||''', '''||NEW.fullname||''',
'''||NEW.gelar_depan||''', '''||NEW.gelar_belakang||''', '''||NEW.nickname||''', '''||NEW.gender||''', '''||NEW.placeofbirth||''',
'''||NEW.dateofbirth||''', '''||NEW.pension_date||''', '''||NEW.maritalstatusid||''', '''||NEW.karpeg||''', '''||NEW.karis||''',
'''||NEW.askes||''', '''||NEW.taspen||''', '''||NEW.npwp||''', '''||NEW.nation_id||''', '''||NEW.myaddress||''', '''||NEW.kal_id||''', '''||NEW.kec_id||''',
'''||NEW.kode_kota||''', '''||NEW.province_code||''', '''||NEW.country_code||''', '''||NEW.postal_code||''',
'''||NEW.rt||''', '''||NEW.rw||''', '''||NEW.phone||''', '''||NEW.email||''', '''||NEW.fax||''', '''||NEW.mobile||''', '''||NEW.height||'''
, '''||NEW.weight||''', '''||NEW.blood_id||''',
'||NEW.hair_id||', '||NEW.face_id||', '||NEW.skin_id||', '''||NEW.disability||''', '''||NEW.characteristic||''',
'''||NEW.hoby||''', '''||NEW.employed_date||''', '''||NEW.status_id||''', '''||NEW.emp_type||''', '''||NEW.tipe_pegawai||''',
'''||NEW.tipe_pegawai_status||''', '''||NEW.functional||''', '''||NEW.picturefile||''', '''||NEW.die_date||''',
'''||NEW.non_active||''', '''||NEW.modified_by||''', '''||NEW.modified_date||''', '||NEW.agama_id||',
'''||NEW.email_standard||''', '''||NEW.email_tambahan||''', '''||NEW.email_pribadi||''', '||NEW.question_id||',
'''||NEW.answer||''', '||NEW.role_id||', '''||NEW.username||''', '''||NEW."NIP"||''', '''||NEW.status||''', '''||NEW.picturefile2||''',
'||NEW.status_sivitas_id||', '||NEW.status_aktif_sivitas_id||');');
perform dblink_disconnect();
RETURN NEW;
END IF;
IF tg_op = 'UPDATE' THEN
perform dblink_connect('dbname=mdm host=localhost user=mdm password=rahasia');
perform dblink_exec('UPDATE employee_all
SET id='||NEW.id||',
org_unit_code='''||NEW.org_unit_code||''',
employee_id='''||NEW.employee_id||''',
other_id='''||NEW.other_id||''',
fullname='''||NEW.fullname||''',
gelar_depan='''||NEW.gelar_depan||''',
gelar_belakang='''||NEW.gelar_belakang||''',
nickname='''||NEW.nickname||''',
gender='''||NEW.gender||''',
placeofbirth='''||NEW.placeofbirth||''',
dateofbirth='''||NEW.dateofbirth||''',
pension_date='''||NEW.pension_date||''',
maritalstatusid='''||NEW.maritalstatusid||''',
karpeg='''||NEW.karpeg||''',
karis='''||NEW.karis||''',
askes='''||NEW.askes||''',
taspen='''||NEW.taspen||''',
npwp='''||NEW.npwp||''',
nation_id='''||NEW.nation_id||''',
myaddress='''||NEW.myaddress||''',
kal_id='''||NEW.kal_id||''',
kec_id='''||NEW.kec_id||''',
kode_kota='''||NEW.kode_kota||''',
province_code='''||NEW.province_code||''',
country_code='''||NEW.country_code||''',
postal_code='''||NEW.postal_code||''',
rt='''||NEW.rt||''',
rw='''||NEW.rw||''',
phone='''||NEW.phone||''',
email='''||NEW.email||''',
fax='''||NEW.fax||''',
mobile='''||NEW.mobile||''',
height='''||NEW.height||''',
weight='''||NEW.weight||''',
blood_id='''||NEW.blood_id||''',
hair_id='||NEW.hair_id||',
face_id='||NEW.face_id||',
skin_id='||NEW.skin_id||',
disability='''||NEW.disability||''',
characteristic='''||NEW.characteristic||''',
hoby='''||NEW.hoby||''',
employed_date='''||NEW.employed_date||''',
status_id='''||NEW.status_id||''',
emp_type='''||NEW.emp_type||''',
tipe_pegawai='''||NEW.tipe_pegawai||''',
tipe_pegawai_status='''||NEW.tipe_pegawai_status||''',
functional='''||NEW.functional||''',
picturefile='''||NEW.picturefile||''',
die_date='''||NEW.die_date||''',
non_active='''||NEW.non_active||''',
modified_by='''||NEW.modified_by||''',
modified_date='''||NEW.modified_date||''',
agama_id='||NEW.agama_id||',
email_standard='''||NEW.email_standard||''',
email_tambahan='''||NEW.email_tambahan||''',
email_pribadi='''||NEW.email_pribadi||''',
question_id='||NEW.question_id||',
answer='''||NEW.answer||''',
role_id='||NEW.role_id||',
username='''||NEW.username||''',
nip='''||NEW."NIP"||''',
status='''||NEW.status||''',
picturefile2='''||NEW.picturefile2||''',
status_sivitas_id='||NEW.status_sivitas_id||',
status_aktif_sivitas_id='||NEW.status_aktif_sivitas_id||'
WHERE id='||OLD.id||' ;');
perform dblink_disconnect();
RETURN new;
END IF;
END; $$ LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS sinkronisasi_employee_all ON employee_all ;
CREATE TRIGGER sinkronisasi_employee_all AFTER INSERT OR DELETE OR UPDATE
ON employee_all FOR EACH ROW
EXECUTE PROCEDURE sync_employeea_all();
Referensi
Trigger di PostgreSQL 9.1, http://www.postgresql.org/docs/9.1/static/sql-createtrigger.html
Cara Menggunakan DBLink di PostgreSQL, http://workshop.openthinklabs.com/resources/sistem-basis-data-database/postgresql-bootcamp/buku-masak/bagaimana-cara-menggunakan-fitur-database-link-di-postgresql
Function di PostgreSQL 9.1, http://www.postgresql.org/docs/9.1/static/sql-createfunction.html