Company insights

การใช้งาน Trigger ใน PostgreSQL (Insert, Update, Delete)


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
และเพิ่มความปลอดภัยในการจัดการข้อมูลภายในระบบฐานข้อมูล