ข้อ จำกัด ต่างประเทศที่สำคัญถูกนำมาใช้กับทริกเกอร์ภายในพิเศษ FOR EACH ROWทั้งหมดของพวกเขาจะถูกเรียกใช้
โปรดทราบว่านี่คือรายละเอียดการใช้งานที่สามารถเปลี่ยนแปลงได้ดังนั้นอย่าพึ่งพา แต่พื้นฐานไม่ได้เปลี่ยนไปในสองสามเวอร์ชันหลักดังนั้นการเปลี่ยนแปลงครั้งใหญ่จึงไม่น่าเป็นไปได้
ฉันวิ่งทดสอบอย่างรวดเร็วด้วยง่าย จำกัด FK จากไปtbl tbltypeใช้ FK อย่างง่ายพร้อมกับทริกเกอร์ภายในสี่ตัวFOR EACH ROWในการทดสอบของฉันในหน้า 9.4
ต่อไปนี้เป็นบทสรุปอย่างรวดเร็วเกี่ยวกับวิธีตรวจสอบ:
SELECT oid -- 74791
FROM pg_constraint
WHERE conrelid = 'tbl'::regclass
AND contype = 'f';
SELECT objid, classid::regclass -- 74792,74793,74794,74795 / 'pg_trigger'
FROM pg_depend
WHERE refobjid = 74791
AND deptype = 'i'
SELECT tgrelid::regclass, tgname, tgfoid, tgtype FROM pg_trigger
WHERE oid IN (74792,74793,74794,74795) ORDER BY tgfoid;
'tbl' ;'RI_ConstraintTrigger_c_74794';1644;5
'tbl' ;'RI_ConstraintTrigger_c_74795';1645;17
'tbltype';'RI_ConstraintTrigger_a_74792';1654;9
'tbltype';'RI_ConstraintTrigger_a_74793';1655;17
SELECT oid, proname FROM pg_proc
WHERE oid IN (1654,1655,1644,1645);
1644;'RI_FKey_check_ins'
1645;'RI_FKey_check_upd'
1654;'RI_FKey_noaction_del'
1655;'RI_FKey_noaction_upd'
"noaction" ภายในสองชุดtbltypeทำงาน
ทริกเกอร์ "check" ภายในสองอันtblทำงาน
ทั้งหมดของพวกเขาจะดำเนินการตามที่ระบุโดยเลขคี่ในFOR EACH ROWtgtype
2 ไบต์ของ Postgres tgtype smallintเป็นตัวแทนint16ในรหัสที่มา C TRIGGER_TYPE_ROWที่น้อยถอดรหัสบิตอย่างมีนัยสำคัญ คำอธิบายโดยละเอียดที่นี่:
คุณสามารถทดสอบสิ่งนี้ได้อย่างง่ายดายด้วยทริกเกอร์ที่เหมือนกันซึ่งคุณเปลี่ยนFOR ROW/ STATEMENT...