PostgreSQL ทริกเกอร์: สร้าง แสดงรายการ & วางพร้อมตัวอย่าง

ทริกเกอร์คืออะไร PostgreSQL?

A PostgreSQL ทริกเกอร์ เป็นฟังก์ชันที่ถูกทริกเกอร์โดยอัตโนมัติเมื่อมีเหตุการณ์ฐานข้อมูลเกิดขึ้นบนวัตถุฐานข้อมูล ตัวอย่างเช่นตาราง ตัวอย่างของเหตุการณ์ฐานข้อมูลที่สามารถเปิดใช้งานทริกเกอร์ ได้แก่ INSERT, UPDATE, DELETE ฯลฯ นอกจากนี้ เมื่อคุณสร้างทริกเกอร์สำหรับตาราง ทริกเกอร์จะหายไปโดยอัตโนมัติเมื่อตารางนั้นถูกลบ

วิธีการใช้ทริกเกอร์ PostgreSQL?

สามารถทำเครื่องหมายทริกเกอร์ด้วยตัวดำเนินการ FOR EACH ROW ในระหว่างการสร้างได้ ทริกเกอร์ดังกล่าวจะถูกเรียกใช้หนึ่งครั้งสำหรับแต่ละแถวที่แก้ไขโดยการดำเนินการ ทริกเกอร์ยังสามารถทำเครื่องหมายด้วยตัวดำเนินการ FOR EACH STATEMENT ในระหว่างการสร้างได้เช่นกัน ทริกเกอร์นี้จะถูกดำเนินการเพียงครั้งเดียวสำหรับการดำเนินการเฉพาะ

PostgreSQL สร้างทริกเกอร์

ในการสร้างทริกเกอร์ เราใช้ฟังก์ชัน CREATE TRIGGER นี่คือไวยากรณ์สำหรับฟังก์ชัน:

CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-name  
ON table-name  
[  
 -- Trigger logic  
];

ชื่อทริกเกอร์คือชื่อของทริกเกอร์

BEFORE, AFTER และ INSTEAD OF คือคีย์เวิร์ดที่กำหนดว่าจะเรียกใช้ทริกเกอร์เมื่อใด

ชื่อเหตุการณ์คือชื่อของเหตุการณ์ที่จะทำให้ทริกเกอร์ถูกเรียกใช้ นี้สามารถ INSERT, อัปเดต, ลบ ฯลฯ

ชื่อตารางคือชื่อของตารางที่จะสร้างทริกเกอร์

หากจะต้องสร้างทริกเกอร์สำหรับการดำเนินการ INSERT เราจะต้องเพิ่มพารามิเตอร์ชื่อคอลัมน์ ON

รูปแบบประโยคต่อไปนี้แสดงให้เห็นสิ่งนี้:

CREATE TRIGGER trigger-name AFTER INSERT ON column-name  
ON table-name  
[  
 -- Trigger logic
];

PostgreSQL สร้างตัวอย่างทริกเกอร์

เราจะใช้ตารางราคาที่ระบุด้านล่าง:

ราคา:

PostgreSQL สร้างทริกเกอร์

ให้เราสร้างตารางใหม่ Price_Audits ซึ่งเราจะบันทึกการเปลี่ยนแปลงที่ทำกับตารางราคา:

CREATE TABLE Price_Audits (
   book_id INT NOT NULL,
    entry_date text NOT NULL
);

ตอนนี้เราสามารถกำหนดฟังก์ชันใหม่ชื่อ auditfunc ได้:

CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$
   BEGIN
      INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);
      RETURN NEW;
   END;
$my_table$ LANGUAGE plpgsql;

ฟังก์ชันด้านบนจะแทรกบันทึกลงในตาราง Price_Audits รวมถึงรหัสแถวใหม่และเวลาที่สร้างบันทึก

ตอนนี้เรามีฟังก์ชันทริกเกอร์แล้ว เราควรผูกมันเข้ากับตารางราคาของเรา เราจะให้ทริกเกอร์ชื่อ price_trigger ก่อนที่จะสร้างบันทึกใหม่ ฟังก์ชันทริกเกอร์จะถูกเรียกใช้โดยอัตโนมัติเพื่อบันทึกการเปลี่ยนแปลง นี่คือทริกเกอร์:

CREATE TRIGGER price_trigger AFTER INSERT ON Price
FOR EACH ROW EXECUTE PROCEDURE auditfunc();

ให้เราแทรกบันทึกใหม่ลงในตารางราคา:

INSERT INTO Price 
VALUES (3, 400);

ตอนนี้เราได้แทรกบันทึกลงในตารางราคาแล้ว ควรแทรกบันทึกลงในตาราง Price_Audit ด้วย นี่จะเป็นผลมาจากทริกเกอร์ที่เราสร้างขึ้นในตารางราคา ให้เราตรวจสอบสิ่งนี้:

SELECT * FROM Price_Audits;

สิ่งนี้จะส่งคืนสิ่งต่อไปนี้:

PostgreSQL สร้างทริกเกอร์

ทริกเกอร์ทำงานได้สำเร็จ

ทริกเกอร์รายการ Postgres

ทริกเกอร์ทั้งหมดที่คุณสร้างขึ้น PostgreSQL จะถูกเก็บไว้ในตาราง pg_trigger หากต้องการดูรายการทริกเกอร์ที่คุณมี ฐานข้อมูลค้นหาตารางโดยการรันคำสั่ง SELECT ดังที่แสดงด้านล่าง:

SELECT tgname FROM pg_trigger;

สิ่งนี้ส่งคืนสิ่งต่อไปนี้:

ทริกเกอร์รายการ Postgres

คอลัมน์ tgname ของตาราง pg_trigger หมายถึงชื่อของทริกเกอร์

Postgres ปล่อยทริกเกอร์

เพื่อดรอป PostgreSQL ทริกเกอร์ เราใช้คำสั่ง DROP TRIGGER โดยมีรูปแบบดังต่อไปนี้:

DROP TRIGGER [IF EXISTS] trigger-name 
ON table-name [ CASCADE | RESTRICT ];

พารามิเตอร์ชื่อทริกเกอร์หมายถึงชื่อของทริกเกอร์ที่จะถูกลบ

ชื่อตารางหมายถึงชื่อของตารางที่ต้องการลบทริกเกอร์

ส่วนคำสั่ง IF EXISTS พยายามลบทริกเกอร์ที่มีอยู่ หากคุณพยายามลบทริกเกอร์ที่ไม่มีอยู่โดยไม่ใช้ส่วนคำสั่ง IF EXISTS คุณจะได้รับข้อผิดพลาด

ตัวเลือก CASCADE จะช่วยให้คุณวางวัตถุทั้งหมดที่ขึ้นอยู่กับทริกเกอร์โดยอัตโนมัติ

หากคุณใช้ตัวเลือก RESTRICT ทริกเกอร์จะไม่ถูกลบหากออบเจ็กต์ขึ้นอยู่กับทริกเกอร์

ตัวอย่างเช่น:

หากต้องการลบทริกเกอร์ที่ชื่อ example_trigger บนตาราง Price ให้ใช้คำสั่งต่อไปนี้:

หากต้องการลบทริกเกอร์ที่ชื่อ example_trigger บนตาราง Company ให้รันคำสั่งต่อไปนี้:

DROP TRIGGER example_trigger IF EXISTS
ON Company;

การใช้งาน pgAdmin

ตอนนี้เรามาดูกันว่าการกระทำทั้งสามดำเนินการอย่างไรโดยใช้ pgAdmin

วิธีการสร้างทริกเกอร์ใน PostgreSQL โดยใช้ pgAdmin

นี่คือวิธีที่คุณสามารถสร้างทริกเกอร์ใน Postgres โดยใช้ pgAdmin:

ขั้นตอนที่ 1) เข้าสู่ระบบบัญชี pgAdmin ของคุณ

เปิด pgAdmin และเข้าสู่ระบบบัญชีของคุณโดยใช้ข้อมูลประจำตัวของคุณ

ขั้นตอนที่ 2) สร้างฐานข้อมูลสาธิต

  1. จากแถบนำทางทางด้านซ้ายให้คลิกฐานข้อมูล
  2. คลิกสาธิต

สร้างทริกเกอร์ใน PostgreSQL โดยใช้ pgAdmin

ขั้นตอนที่ 3) พิมพ์แบบสอบถาม

หากต้องการสร้างตาราง Price_Audits ให้พิมพ์แบบสอบถามในตัวแก้ไข:

CREATE TABLE Price_Audits (
   book_id INT NOT NULL,
    entry_date text NOT NULL
)

ขั้นตอนที่ 4) ดำเนินการแบบสอบถาม

คลิกปุ่มดำเนินการ

สร้างทริกเกอร์ใน PostgreSQL โดยใช้ pgAdmin

ขั้นตอนที่ 5) เรียกใช้โค้ดสำหรับ auditfunc

เรียกใช้โค้ดต่อไปนี้เพื่อกำหนดฟังก์ชัน auditfunc:

CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$
   BEGIN
      INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);
      RETURN NEW;
   END;
$my_table$ LANGUAGE plpgsql

ขั้นตอนที่ 6) เรียกใช้โค้ดเพื่อสร้างทริกเกอร์

รันโค้ดต่อไปนี้เพื่อสร้างทริกเกอร์ price_trigger:

CREATE TRIGGER price_trigger AFTER INSERT ON Price
FOR EACH ROW EXECUTE PROCEDURE auditfunc()

ขั้นตอนที่ 7) แทรกบันทึกใหม่

  1. รันคำสั่งต่อไปนี้เพื่อแทรกข้อมูลใหม่ลงในตารางราคา:
    INSERT INTO Price
    VALUES (3, 400)
  2. รันคำสั่งต่อไปนี้เพื่อตรวจสอบว่ามีการเพิ่มระเบียนเข้าไปในตาราง Price_Audits หรือไม่:
    SELECT * FROM Price_Audits

    สิ่งนี้ควรส่งคืนสิ่งต่อไปนี้:

สร้างทริกเกอร์ใน PostgreSQL โดยใช้ pgAdmin

ขั้นตอนที่ 8) ตรวจสอบเนื้อหาของตาราง

ให้เราตรวจสอบเนื้อหาของตาราง Price_Audits:

รายชื่อทริกเกอร์โดยใช้ pgAdmin

ขั้นตอน 1) รันคำสั่งต่อไปนี้เพื่อตรวจสอบทริกเกอร์ในฐานข้อมูลของคุณ:

SELECT tgname FROM pg_trigger

สิ่งนี้ส่งคืนสิ่งต่อไปนี้:

รายชื่อทริกเกอร์โดยใช้ pgAdmin

การวางทริกเกอร์โดยใช้ pgAdmin

หากต้องการลบทริกเกอร์ที่ชื่อ example_trigger บนตาราง Company ให้รันคำสั่งต่อไปนี้:

DROP TRIGGER example_trigger IF EXISTS
ON Company

สรุป

  • A PostgreSQL ทริกเกอร์หมายถึงฟังก์ชันที่ทริกเกอร์โดยอัตโนมัติเมื่อมีเหตุการณ์ฐานข้อมูลเกิดขึ้นบนออบเจ็กต์ฐานข้อมูล เช่น ตาราง
  • ตัวอย่างของเหตุการณ์ฐานข้อมูลดังกล่าว ได้แก่ INSERT, UPDATE, DELETE เป็นต้น
  • ทริกเกอร์มีอยู่เฉพาะในช่วงอายุของออบเจ็กต์ฐานข้อมูลที่ถูกสร้างขึ้นเท่านั้น
  • หากวัตถุฐานข้อมูลถูกลบ ทริกเกอร์จะถูกลบด้วย
  • PostgreSQL ทริกเกอร์ถูกสร้างขึ้นโดยใช้คำสั่ง CREATE TRIGGER
  • ทริกเกอร์แต่ละตัวเชื่อมโยงกับฟังก์ชันที่ระบุว่าทริกเกอร์จะทำอะไรเมื่อมีการเรียกใช้

ดาวน์โหลดฐานข้อมูลที่ใช้ในบทช่วยสอนนี้