ฉันชอบคำอธิบายคุณลักษณะของเครก ข้อมูลจำเพาะ SQL-2011 กำหนดไว้ในบริบทของทริกเกอร์ว่า"ชุดของแถวที่ถูกลบแทรกหรือแทนที่เรียกว่าตารางการเปลี่ยนแปลง" คำอธิบายที่คล้ายกันคือที่ระบุไว้ในเอกสารที่
ในขณะที่ตารางการเปลี่ยนแปลงสำหรับAFTER
ทริกเกอร์มีการระบุโดยใช้REFERENCING
ข้อในวิธีมาตรฐานตัวแปรแถวที่ใช้ในFOR EACH ROW
ทริกเกอร์อาจไม่ได้ระบุไว้ในREFERENCING
ข้อ พวกเขามีอยู่ในลักษณะที่ขึ้นอยู่กับภาษาที่เขียนฟังก์ชันทริกเกอร์ บางภาษาทำงานได้อย่างมีประสิทธิภาพราวกับมีREFERENCING
ประโยคที่บรรจุอยู่OLD ROW AS OLD NEW ROW AS NEW.
เป็นหลักพวกเขาทำให้การเปลี่ยนแปลงทั้งหมดของคำสั่งพร้อมให้คุณซึ่งมีประโยชน์มาก สำหรับการอ้างอิง DDL ในการสร้างทริกเกอร์มีลักษณะเช่นนี้กับตารางการเปลี่ยน
REFERENCING OLD TABLE AS oldtable NEW TABLE AS newtable
คุณสามารถดูตัวอย่างที่นี่และที่นี่เป็นหนึ่งจากชุดทดสอบ ,
CREATE TABLE transition_table_base (id int PRIMARY KEY, val text);
CREATE FUNCTION transition_table_base_ins_func()
RETURNS trigger
LANGUAGE plpgsql
AS $$
DECLARE
t text;
l text;
BEGIN
t = '';
FOR l IN EXECUTE
$q$
EXPLAIN (TIMING off, COSTS off, VERBOSE on)
SELECT * FROM newtable
$q$ LOOP
t = t || l || E'\n';
END LOOP;
RAISE INFO '%', t;
RETURN new;
END;
$$;
CREATE TRIGGER transition_table_base_ins_trig
AFTER INSERT ON transition_table_base
REFERENCING OLD TABLE AS oldtable NEW TABLE AS newtable
FOR EACH STATEMENT
EXECUTE PROCEDURE transition_table_base_ins_func();
หมายเหตุเพิ่มเติมบางส่วน
- พวกมันใช้ได้เฉพาะกับ
AFTER
ทริกเกอร์
ON CONFLICT
พวกเขาใช้เวลาในสิ่งที่บัญชีเช่น
สิ่งสำคัญคือต้องชี้ให้เห็นว่าไม่สามารถใช้งานได้ใน PG 10ทั้งหมด มีจำนวนมากที่มีปัญหาเปิดกับตารางการเปลี่ยนแปลง ส่วนใหญ่มีแพทช์ มีการต่อสู้แบบประจัญบานซึ่งเป็นชนิดของกิจวัตรประจำวัน ดูเหมือนว่ามีคนยกของหนักขึ้น กระทู้แสดงให้เห็นว่าเราจะรู้ว่าในเร็ว ๆ นี้
ผู้เขียนตอบกลับ - ดูเหมือนว่าจะไปได้ดีอีกครั้ง