Trigger ใน PostgreSQL เป็นกลไกที่ช่วยให้ฐานข้อมูลสามารถทำงานบางอย่างได้โดยอัตโนมัติ
เมื่อมีเหตุการณ์เกิดขึ้นกับตาราง เช่น การ INSERT เพิ่มข้อมูล,
UPDATE แก้ไขข้อมูล หรือ DELETE ลบข้อมูล
Trigger มักถูกใช้สำหรับการตรวจสอบข้อมูล (Validation),
การบันทึกประวัติการเปลี่ยนแปลง (Audit Log) หรือการปรับปรุงข้อมูลในตารางอื่นแบบอัตโนมัติ
โครงสร้างของ Trigger ใน PostgreSQL
การสร้าง Trigger ใน PostgreSQL จะมีสองส่วนหลัก คือ
- Function (Trigger Function)
- Trigger
โดย Function จะเป็นตัวกำหนดว่าต้องการให้ทำอะไรเมื่อ Trigger ทำงาน
1. การสร้าง Trigger Function
ตัวอย่าง Function สำหรับบันทึก Log เมื่อมีการเพิ่มข้อมูล
CREATE OR REPLACE FUNCTION log_insert_post()
RETURNS TRIGGER AS $$
BEGIN
INSERT INTO posts_log(post_id, action_type, action_date)
VALUES (NEW.post_id, 'INSERT', NOW()); RETURN NEW;
END;
$$ LANGUAGE plpgsql;
คำสั่ง NEW หมายถึงข้อมูลใหม่ที่ถูก INSERT เข้ามา
2. การสร้าง Trigger สำหรับ INSERT
CREATE TRIGGER trigger_insert_post
AFTER INSERT ON posts
FOR EACH ROW
EXECUTE FUNCTION log_insert_post();
Trigger นี้จะทำงานทุกครั้งที่มีการ INSERT ข้อมูลในตาราง posts
3. Trigger สำหรับ UPDATE
ตัวอย่าง Trigger สำหรับบันทึกการแก้ไขข้อมูล
CREATE OR REPLACE FUNCTION log_update_post()
RETURNS TRIGGER AS $$
BEGIN
INSERT INTO posts_log(post_id, action_type, action_date)
VALUES (NEW.post_id, 'UPDATE', NOW()); RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER trigger_update_post
AFTER UPDATE ON posts
FOR EACH ROW
EXECUTE FUNCTION log_update_post();
ในการ UPDATE เราสามารถเข้าถึงข้อมูลก่อนแก้ไขได้ด้วย OLD
และข้อมูลใหม่ด้วย NEW
4. Trigger สำหรับ DELETE
ตัวอย่าง Trigger สำหรับบันทึกการลบข้อมูล
CREATE OR REPLACE FUNCTION log_delete_post()
RETURNS TRIGGER AS $$
BEGIN
INSERT INTO posts_log(post_id, action_type, action_date)
VALUES (OLD.post_id, 'DELETE', NOW()); RETURN OLD;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER trigger_delete_post
AFTER DELETE ON posts
FOR EACH ROW
EXECUTE FUNCTION log_delete_post();
ในการ DELETE เราจะใช้ OLD เพื่ออ้างอิงข้อมูลก่อนถูกลบ
BEFORE vs AFTER Trigger
- BEFORE – ทำงานก่อนที่คำสั่งจะถูก execute
- AFTER – ทำงานหลังจากคำสั่ง execute แล้ว
ตัวอย่าง
CREATE TRIGGER trigger_before_insert
BEFORE INSERT ON posts
FOR EACH ROW
EXECUTE FUNCTION check_post_data();
ตัวอย่างการใช้งานจริง
Trigger มักถูกใช้ในระบบจริง เช่น
- ระบบบันทึกประวัติการแก้ไขข้อมูล (Audit Log)
- ระบบอัปเดตเวลาการแก้ไขอัตโนมัติ
- ระบบตรวจสอบความถูกต้องของข้อมูลก่อนบันทึก
- ระบบ sync ข้อมูลไปยังตารางอื่น
สรุป
Trigger เป็นเครื่องมือสำคัญใน PostgreSQL ที่ช่วยให้ฐานข้อมูลสามารถทำงานอัตโนมัติ
เมื่อมีเหตุการณ์ INSERT, UPDATE หรือ DELETE เกิดขึ้นในตาราง
การใช้ Trigger อย่างเหมาะสมจะช่วยลดภาระของ application
และเพิ่มความปลอดภัยในการจัดการข้อมูลภายในระบบฐานข้อมูล
