বিদেশী মূল সীমাবদ্ধতাগুলি বর্তমানে বিশেষ অভ্যন্তরীণ ট্রিগারগুলির সাথে প্রয়োগ করা হয়। তাদের সব চালানো হয় FOR EACH ROW
।
নোট করুন যে এগুলি বাস্তবায়নের বিশদ যা পরিবর্তন করতে পারে, তাই এর উপর নির্ভর করবেন না। তবে কয়েকটি বড় সংস্করণে বেসিকগুলি পরিবর্তন হয়নি, তাই বড় পরিবর্তনগুলি অসম্ভব।
আমি থেকে একটি সহজ এফ কে বাধ্যতা সঙ্গে একটি দ্রুত পরীক্ষা দৌড়ে tbl
করার tbltype
। 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'
দুটি অভ্যন্তরীণ "কৌতুক" চালু করে tbltype
।
দুটি অভ্যন্তরীণ "চেক" চালু করে tbl
। বিজোড় সংখ্যা দ্বারা ইঙ্গিত হিসাবে
এগুলি সমস্ত চালিত FOR EACH ROW
হয় tgtype
।
পোস্টগ্রিসের 2 বাইটগুলি সি উত্স কোডে tgtype smallint
একটি উপস্থাপন করে int16
যেখানে সর্বনিম্ন উল্লেখযোগ্য বিট এনকোড হয় TRIGGER_TYPE_ROW
। বিস্তারিত ব্যাখ্যা এখানে:
আপনি সহজেই অভিন্ন ট্রিগার যেখানে আপনি শুধুমাত্র পরিবর্তন একজোড়া সঙ্গে এই পরীক্ষা করতে পারেন FOR ROW
/ STATEMENT
...