โดยทั่วไปเราต้องการสร้าง TRIGGER สำหรับแต่ละตารางที่เราต้องการรับการแจ้งเตือนสำหรับการดำเนินการ UPDATE / INSERT / DELETE เมื่อทริกเกอร์นี้เริ่มทำงานมันจะเรียกใช้ฟังก์ชั่นที่จะเพิ่มแถวใหม่ (เข้ารหัสเหตุการณ์) ลงในตารางบันทึกที่เราจะสำรวจจากบริการภายนอก
นั่นเป็นการใช้งานทริกเกอร์
ก่อนที่จะเข้าร่วมกับ Postgres TRIGGER (s) เราต้องการทราบวิธีการปรับขนาด: เราสามารถสร้างทริกเกอร์จำนวนเท่าใดในการติดตั้ง Postgres เดียว
หากคุณสร้างมันขึ้นมาในที่สุดคุณก็จะมีพื้นที่ดิสก์เหลืออยู่
ไม่มีข้อ จำกัด สำหรับทริกเกอร์
ข้อ จำกัด PostgreSQL ได้รับการบันทึกในหน้าเกี่ยวกับ
ส่งผลกระทบต่อประสิทธิภาพการค้นหาหรือไม่
ขึ้นอยู่กับประเภทของทริกเกอร์ภาษาของทริกเกอร์และสิ่งที่ทริกเกอร์ทำ
BEFORE ... FOR EACH STATEMENT
ทริกเกอร์PL / PgSQL ง่าย ๆที่ไม่ทำอะไรเลยมีค่าใช้จ่ายเกือบเป็นศูนย์
FOR EACH ROW
ทริกเกอร์มีค่าใช้จ่ายสูงกว่าFOR EACH STATEMENT
ทริกเกอร์ เห็นได้ชัดว่ามีการปรับสเกลด้วยจำนวนแถวที่ได้รับผลกระทบ
AFTER
ทริกเกอร์มีราคาแพงกว่าBEFORE
ทริกเกอร์เพราะพวกเขาจะต้องเข้าคิวจนกระทั่งคำสั่งเสร็จสิ้นการทำงานแล้วจึงดำเนินการ พวกเขาจะไม่กระจายไปยังดิสก์หากคิวมีขนาดใหญ่ (อย่างน้อยใน 9.4 และต่ำกว่าอาจเปลี่ยนแปลงได้ในอนาคต) ดังนั้นAFTER
คิวทริกเกอร์ขนาดใหญ่อาจทำให้หน่วยความจำที่มีอยู่สามารถใช้งานได้มากเกินไปซึ่งจะทำให้คำสั่งยกเลิก
ทริกเกอร์ที่แก้ไขNEW
แถวก่อนที่จะแทรก / อัปเดตมีราคาถูกกว่าทริกเกอร์ที่ทำ DML
กรณีการใช้งานเฉพาะที่คุณต้องการจะทำงานได้ดีขึ้นด้วยการปรับปรุงที่กำลังดำเนินการซึ่งอาจทำให้เป็น PostgreSQL 9.5 (ถ้าเราโชคดี) ที่ซึ่งFOR EACH STATEMENT
ทริกเกอร์สามารถเห็นเสมือนOLD
และNEW
ตาราง สิ่งนี้เป็นไปไม่ได้ในเวอร์ชันปัจจุบันของ PostgreSQL ดังนั้นคุณต้องใช้FOR EACH ROW
ทริกเกอร์แทน
ใครเคยลองสิ่งนี้บ้างไหม?
แน่นอน. มันค่อนข้างใช้งานมาตรฐานสำหรับทริกเกอร์พร้อมกับการตรวจสอบการตรวจสุขภาพจิต ฯลฯ
คุณจะต้องการที่จะมองเข้าไปLISTEN
และNOTIFY
หาวิธีที่ดีที่จะตื่นขึ้นมาคนงานของคุณเมื่อมีการเปลี่ยนแปลงให้กับตารางงานที่เกิดขึ้น
คุณกำลังทำสิ่งที่สำคัญที่สุดอยู่แล้วโดยหลีกเลี่ยงการพูดคุยกับระบบภายนอกโดยตรงจากทริกเกอร์ ซึ่งมีแนวโน้มที่จะเป็นปัญหาสำหรับประสิทธิภาพและความน่าเชื่อถือ คนมักจะพยายามทำสิ่งต่าง ๆ เช่นส่งจดหมายโดยตรงจากทริกเกอร์และนั่นเป็นข่าวร้าย