Postgres: Bagaimana Untuk Mencipta Table Trigger
Rekodkan perubahan dalam table anda dengan trigger
Seperti yang dijanjikan dalam rencana yang lepas, sepatutnya saya menunjukkan cara membuat trigger dalam database table.
Disable dan Enable Trigger Postgres Trigger
Baik. Tutorial ini sepatutnya dimulakan dengan “Bagaimana hendak create TRIGGER” tetapi tidak sempat hendak tulis. Disebabkan sedang dalam proses untuk disable TRIGGER jadi saya kongsikan dulu caranya. Untuk mencari TRIGGER dalam database: SELECT event_object_table AS table_name ,trigger_name FROM information_schema.trigg…
Apa sebenarnya TRIGGER?
Trigger adalah sebuah event yang dijalankan selepas sesuatu action dilakukan ke atas table. Action tersebut mungkin terdiri daripada:
UPDATE
INSERT
DELETE
TRUNCATE
Jenis-jenis TRIGGER?
Terdapat 2 jenis trigger, iaitu:
Row Level Trigger
Statement Level Trigger
Row Level Trigger akan dicetus setiap rows dalam table berubah. Contohnya jika anda ada 100 row dalam table tersebut. Sebagai contoh anda run arahan SQL ini:
UPDATE customers SET active='YES' WHERE create_date > '2023-10-10'
100 rows update
Jika trigger tersebut adalah Row Level Trigger, ini bermakna trigger ini akan dicetuskan sebanyak 100 kali.
Namun jika ianya adalah Statement Level Trigger, trigger ini hanya akan dicetus 1 kali sahaja.
Cara membuat TRIGGER?
Terdapat 2 bahagian penting dalam membuat TRIGGER, iaitu:
Membuat Trigger Function
Mengkaitkan Trigger Function tersebut kepada event pencetus
Katakan kita ada sebuah table bernama customers
CREATE TABLE "customers"
(
"CustID" INT NOT NULL,
"FullName" VARCHAR(20) NOT NULL,
"DOB" TIMESTAMP,
"Address" VARCHAR(70),
"City" VARCHAR(40),
"State" VARCHAR(40),
"Country" VARCHAR(40),
"PostalCode" VARCHAR(10),
"Email" VARCHAR(60),
CONSTRAINT "PK_customers" PRIMARY KEY ("CustID")
);
Sekarang kita bina pula trigger function (saya tidak memasukkan semua column untuk meringkaskan SQL ini)
CREATE OR REPLACE FUNCTION customer_info_change_fnc()
RETURNS trigger AS
$$
BEGIN
INSERT INTO "customers_audit" ( "CustId", "FullName", "DOB","Email","Username" ,"UpdateDate") VALUES(NEW."CustId",NEW."FullName",NEW."DOB",current_user,current_date);
RETURN NEW;
END;
$$
LANGUAGE 'plpgsql';
Sekarang kita attach TRIGGER function tersebut kepada event pencetus. Dalam kes ini, kitanya ingin mengetahui jika ada perubahan pada row table
CREATE TRIGGER capture_customers_update
BEFORE UPDATE
ON "customers"
FOR EACH ROW
EXECUTE PROCEDURE customer_info_change_fnc();
Kod di atas menunjukkan trigger yang bernama capture_customers_update
akan dia cetuskan menggunakan Row Level Trigger (berdasarkan kata kunci FOR EACH ROW
), trigger ini akan memanggil trigger function customer_info_change_fnc().
Cara menghapuskan TRIGGER?
Mudah sahaja
drop trigger capture_customers_update on "customers" ;
Kegunaan TRIGGER?
Ada pelbagai kegunakan TRIGGER ini sebenarnya. Selalunya ia digunakan untuk audit, jadi trigger ini boleh merakam bilakan perubahan data dibuat dan siapakan yang telah membuat perubahan data tersebut.
Ia boleh digunakan untuk menjana data tertentu. Sebagai contoh, Anda ada sebuah table yang merekodkan jumlah pelanggan. Daripada data tersebut dijana secara terus/realtime yang mungkin akan membebankan database anda. Anda boleh menggunakan trigger untuk mengira jumlah pelanggan dan terus update table tersebut. Data hanya akan diupdate jika terdapat terdapat data baru masuk dalam table pelanggan anda.
Atau pun ia boleh digunakan untuk membuat pemeriksaan data. Katakanlah anda hanya membenarkan hanya record pelanggan yang berusia 18 tahun dan ke atas. Jika sistem cuba memasukkan data pelanggan yang berusia kurang daripada 18 tahun, anda boleh menafikan data tersebut.
Harap tulisan ini dapat membantu anda.