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