ক্রেগের বৈশিষ্ট্যটির ব্যাখ্যাটি আমি সত্যিই পছন্দ করি। এসকিউএল-২০১১ স্পেস তাদের ট্রিগার প্রসঙ্গে এটিকে সংজ্ঞায়িত করে যে "সারিগুলির একটি মুছা মুছে ফেলা, sertedোকানো বা প্রতিস্থাপনের একটি সংক্রমণ টেবিল হিসাবে পরিচিত।" ডক্সে অনুরূপ ব্যাখ্যা সরবরাহ করা হয়েছে,
AFTER
ট্রিগারগুলির জন্য রূপান্তরের টেবিলগুলি REFERENCING
স্ট্যান্ডার্ড উপায়ে ক্লজটি ব্যবহার করে নির্দিষ্ট করা থাকলেও FOR EACH ROW
ট্রিগারগুলিতে ব্যবহৃত সারি ভেরিয়েবলগুলি ক্লজটিতে নির্দিষ্ট করা যায় না REFERENCING
। এগুলি এমন উপায়ে পাওয়া যায় যা ভাষার উপর নির্ভরশীল যেখানে ট্রিগার ফাংশন লেখা হয়। কিছু কিছু ভাষা কার্যকরভাবে আচরণ করে যেমন একটি REFERENCING
ধারা রয়েছে thereOLD ROW AS OLD NEW ROW AS NEW.
মূলত তারা পুরো বিবৃতিটির পরিবর্তনগুলি আপনার কাছে উপলভ্য করে যা অতি কার্যকর। রেফারেন্সের জন্য, ট্রিগার তৈরির ডিডিএল রূপান্তর টেবিলগুলির সাথে দেখতে এ রকম দেখাচ্ছে
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 এ উপলব্ধ হওয়া সম্পূর্ণরূপে নিশ্চিত নয় । ট্রানজিশন টেবিলগুলি নিয়ে প্রচুর মুক্ত সমস্যা রয়েছে । বেশিরভাগ প্যাচ আছে। কিছু বিপর্যয় রয়েছে যা এক ধরণের রুটিন। দেখে মনে হচ্ছে ভারী উত্তোলন অন্য কেউ বাছাই করেছে। থ্রেড ইঙ্গিত করে যে আমরা শীঘ্রই জানতে পারবেন।
লেখক প্রতিক্রিয়া জানিয়েছিলেন - মনে হচ্ছে আবার ভাল হচ্ছে ,.