2009-04-01 6 views
5

मेरा गुगलिंग-फू मुझे असफल कर रहा है। कैसे पता चलेगा कि PostgreSQL ट्रिगर अक्षम है या नहीं?आप कैसे बता सकते हैं कि PostgreSQL में कोई ट्रिगर सक्षम है या नहीं?

+0

एम बनाते समय डिफ़ॉल्ट रूप से ट्रिगर्स सक्षम हैं? स्पष्ट वैकल्पिक तालिका सक्षम ट्रिगर आवश्यक है? – user4658312

उत्तर

8

यह postresql के साथ अपने पहले दिन है, लेकिन मुझे लगता है कि आप pg_trigger प्रणाली तालिका के माध्यम से ट्रिगर राज्य की जाँच कर सकते हैं: http://www.postgresql.org/docs/current/static/catalog-pg-trigger.html

कॉलम आप की आवश्यकता होगी tgrelid और tgenabled हैं।

+2

वर्तमान में अद्यतित लिंक: http://www.postgresql.org/docs/current/static/catalog-pg-trigger.html –

2

नीचे दिया गया एसक्यूएल काम करेगा। यह आपके वर्तमान डेटाबेस में सभी ट्रिगर्स प्रदर्शित करता है।

SELECT pg_namespace.nspname, pg_class.relname, pg_trigger.* 
FROM pg_trigger 
JOIN pg_class ON pg_trigger.tgrelid = pg_class.oid 
JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace 

तो tgenabled है 'डी', ट्रिगर अक्षम है। अन्य सभी मान (दस्तावेज here) इंगित करते हैं, कि यह किसी भी तरह से सक्षम है।

बीटीडब्ल्यू। आप एक विशिष्ट तालिका के लिए ट्रिगर की जांच करना चाहते हैं, तो क्वेरी थोड़ा कम है:

SELECT * FROM pg_trigger 
WHERE tgrelid = 'your_schema.your_table'::regclass 

regclass प्रकार के डाली OID के लिए (वस्तु आईडी) योग्य तालिका नाम से आप हो जाता है आसान मार्ग।

2
SELECT EXISTS (
    SELECT tgenabled 
    FROM pg_trigger 
    WHERE tgname='your_unique_trigger_name' AND 
      tgenabled != 'D' 
); 

क्या आप जानते हैं ट्रिगर नाम अद्वितीय है यदि उपरोक्त सच (टी) वापस आ जाएगी अगर your_unique_trigger_name ट्रिगर सक्षम है:

exists 
-------- 
t 
(1 row) 

तो अक्षम यह गलत वापसी होगी (च)।