Create Trigger in PostgreSQL

Berikut ini adalah tutorial bagaimana membuat sebuah trigger di database postgre. trigger ini berfungsi menciptakan sebuah aksi yang ter pantik akibat ada aktivitas update, insert atau delete dalam sebuah database.

pertama kita coba siapkan dulu sebuah tabel yang akan kita pasang sebuah trigger

CREATE TABLE TitikObject(
   id int4 serial primary key,
   koordinat geometry(Point,4326),
   longitude double precision NULL,
   latitude double precision NULL
);

Setelah itu kita siapkan dulu sebuah Function yang akan melakukan sebuah kegiatan ekstrak data geometry menjadi data numeric yang kemudian dimasukkan kedalam field longitude dan latitude. berikut ini adalah function

CREATE OR REPLACE FUNCTION public.extractgeom()
  RETURNS trigger AS
$BODY$
BEGIN
IF pg_trigger_depth() <> 1 THEN
        RETURN NEW;
END IF;
 update public.titikobject set longitude=ST_X(koordinat), latitude= ST_Y(koordinat)
 where id=NEW.id;
  RETURN NEW;
  
END;
$BODY$
  LANGUAGE plpgsql VOLATILE SECURITY DEFINER

setelah function terbuat, selanjutnya kita siapkan sebuah trigger yang akan mengaktifkan function jika ada aktivitas insert atau update di tabel titikobject

CREATE TRIGGER tr_extractgeom
  AFTER INSERT OR UPDATE ON public.titikobject
    FOR EACH ROW 
    EXECUTE PROCEDURE public.extractgeom();

selanjutnya kita coba tes dengan memasukkan sebuah record ke tabel titikobject. pada saat proses insert ini saya hanya memasukkan nilai koordinatnya saja.

insert into public.titikobject (koordinat) 
values(ST_SetSRID(ST_MakePoint(-71.1043443253471, 42.3150676015829),4326));

terlihat pada query diatas saya hanya memasukkan 1 buah value saja ke field koordinat, namun karena sudah ada trigger maka otomatis value utk longitude dan latitude field seharusnya langsung terisi. mari kita lihat hasilnya

select * from public.titikobject

dan ternyata data geometry untuk field koordinat sudah ter ekstrak.

ekstrak

 

demikian semoga bermanfaat.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.