PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

कैसे जांचें कि PostgreSQL में ट्रिगर मौजूद है या नहीं?

कैटलॉग pg_trigger का उपयोग करें।

तालिका books के लिए एक आसान लुकअप :

select tgname
from pg_trigger
where not tgisinternal
and tgrelid = 'books'::regclass;

    tgname     
---------------
 books_trigger
(1 row)

pg_proc का उपयोग करना ट्रिगर फ़ंक्शन का स्रोत प्राप्त करने के लिए:

select tgname, proname, prosrc 
from pg_trigger
join pg_proc p on p.oid = tgfoid
where not tgisinternal
and tgrelid = 'books'::regclass;

    tgname     |    proname    |                    prosrc
---------------+---------------+------------------------------------------------
 books_trigger | books_trigger |                                               +
               |               | begin                                         +
               |               |     if tg_op = 'UPDATE' then                  +
               |               |         if new.listorder > old.listorder then +
               |               |             update books                      +
               |               |             set listorder = listorder- 1      +
               |               |             where listorder <= new.listorder  +
               |               |             and listorder > old.listorder     +
               |               |             and id <> new.id;                 +
               |               |         else                                  +
               |               |             update books                      +
               |               |             set listorder = listorder+ 1      +
               |               |             where listorder >= new.listorder  +
               |               |             and listorder < old.listorder     +
               |               |             and id <> new.id;                 +
               |               |             end if;                           +
               |               |     else                                      +
               |               |         update books                          +
               |               |         set listorder = listorder+ 1          +
               |               |         where listorder >= new.listorder      +
               |               |         and id <> new.id;                     +
               |               |     end if;                                   +
               |               |     return new;                               +
               |               | end
(1 row)

pg_get_triggerdef() . का उदाहरण फ़ंक्शन का उपयोग:

select pg_get_triggerdef(t.oid) as "trigger declaration"
from pg_trigger t
where not tgisinternal
and tgrelid = 'books'::regclass;

                                             trigger declaration                
--------------------------------------------------------------------------------------------------------------
 CREATE TRIGGER books_trigger BEFORE INSERT OR UPDATE ON books FOR EACH ROW EXECUTE PROCEDURE books_trigger()
(1 row) 

एक स्किच में verify स्क्रिप्ट आप एक अनाम कोड ब्लॉक का उपयोग कर सकते हैं, जैसे:

do $$
begin
    perform tgname
    from pg_trigger
    where not tgisinternal
    and tgrelid = 'books'::regclass;
    if not found then 
        raise exception 'trigger not found';
    end if;
end $$;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. बर्मन क्लाउड - भाग 2:क्लाउड बैकअप

  2. मैं कॉलम को दो टेबल से एक आउटपुट में कैसे मर्ज कर सकता हूं?

  3. हेरोकू पीजी:स्कीमा को पॉप्युलेट करने में विफल खींचें

  4. NodeJS पोस्टग्रेज त्रुटि getaddrinfo ENOTFOUND

  5. java.math.BigInteger को java.lang.Integer में नहीं डाला जा सकता है