विदेशी कुंजी बाधाओं को वर्तमान में विशेष आंतरिक ट्रिगर के साथ लागू किया गया है। सब के सब भाग जाते हैं FOR EACH ROW।
ध्यान दें कि ये कार्यान्वयन विवरण हैं जो बदल सकते हैं, इसलिए इस पर भरोसा न करें। लेकिन मूल संस्करणों में पिछले कुछ संस्करणों में बदलाव नहीं हुआ है, इसलिए बड़े बदलाव की संभावना नहीं है।
मैं से एक सरल FK बाधा के साथ एक त्वरित परीक्षण भागा 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।
Postgres के 2 बाइट्स C स्रोत कोड में tgtype smallintप्रतिनिधित्व करते हैं int16जहां कम से कम महत्वपूर्ण बिट एन्कोड होता है TRIGGER_TYPE_ROW। यहाँ विस्तृत विवरण:
आप इसे समान ट्रिगर्स की एक जोड़ी के साथ आसानी से परख सकते हैं, जहां आप केवल परिवर्तन FOR ROW/ STATEMENT...