मुझे वास्तव में क्रेग की विशेषता की व्याख्या पसंद है। 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
।
यह इंगित करना महत्वपूर्ण है कि पीजी 10 में उपलब्ध होना पूरी तरह से निश्चित नहीं है । संक्रमण तालिकाओं के साथ बहुत सारे खुले मुद्दे हैं । अधिकांश में पैच हैं। कुछ अनहोनी होती है जो दिनचर्या की तरह है। ऐसा लगता है कि भारी उठाने को किसी और ने उठाया था। धागा इंगित करता है कि हम जल्द ही पता चल जाएगा।
लेखक ने जवाब दिया - लगता है फिर से अच्छा हो जाएगा,।