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

Postgresql में सभी टेबल के लिए ट्रिगर कैसे बनाएं?

वैसे कोई डेटाबेस-व्यापी ट्रिगर निर्माण नहीं है, लेकिन ऐसे सभी बल्क-एडमिन-ऑपरेशंस के लिए आप पोस्टग्रेएसक्यूएल सिस्टम टेबल का उपयोग हाथ से लिखने के बजाय आपके लिए प्रश्न उत्पन्न करने के लिए कर सकते हैं। इस मामले में आप चला सकते हैं:

SELECT
    'CREATE TRIGGER '
    || tab_name
    || ' BEFORE DELETE ON ALL DATABASE FOR EACH ROW EXECUTE PROCEDURE delete_data();' AS trigger_creation_query
FROM (
    SELECT
        quote_ident(table_schema) || '.' || quote_ident(table_name) as tab_name
    FROM
        information_schema.tables
    WHERE
        table_schema NOT IN ('pg_catalog', 'information_schema')
        AND table_schema NOT LIKE 'pg_toast%'
) tablist;

यह आपको स्ट्रिंग्स का सेट मिलेगा जो SQL कमांड हैं जैसे:

CREATE TRIGGER schema1.table1 BEFORE DELETE ON ALL DATABASE FOR EACH ROW EXECUTE PROCEDURE delete_data();
CREATE TRIGGER schema1.table2 BEFORE DELETE ON ALL DATABASE FOR EACH ROW EXECUTE PROCEDURE delete_data();
CREATE TRIGGER schema1.table3 BEFORE DELETE ON ALL DATABASE FOR EACH ROW EXECUTE PROCEDURE delete_data();
CREATE TRIGGER schema2.table1 BEFORE DELETE ON ALL DATABASE FOR EACH ROW EXECUTE PROCEDURE delete_data();
CREATE TRIGGER schema2."TABLE2" BEFORE DELETE ON ALL DATABASE FOR EACH ROW EXECUTE PROCEDURE delete_data();
...
etc

आपको बस उन्हें एक बार में चलाने की आवश्यकता है (या तो psql . द्वारा या पीजीएडमिन)।

अब कुछ स्पष्टीकरण:

  • मैं information_schema.tables . का उपयोग करके अपने डेटाबेस में तालिकाओं के नामों का चयन करता हूं सिस्टम टेबल। क्योंकि वस्तुतः सभी तालिकाओं का डेटा है, pg_catalog . को बाहर करना याद रखें और information_schema अपने select . से स्कीमा और टोस्ट टेबल ।
  • मैं quote_ident(text) का उपयोग करता हूं फ़ंक्शन जो स्ट्रिंग को दोहरे उद्धरण चिह्नों के अंदर रखेगा ("" ) यदि आवश्यक हो (अर्थात रिक्त स्थान या बड़े अक्षरों वाले नामों की आवश्यकता है)।
  • जब मेरे पास टेबल नामों की सूची होती है तो मैं अपने SQL कमांड प्राप्त करने के लिए उन्हें कुछ स्थिर स्ट्रिंग्स के साथ जोड़ता हूं।
  • मैं उस कमांड को सब-क्वेरी का उपयोग करके लिखता हूं क्योंकि मैं चाहता हूं कि आप यहां क्या हो रहा है, इसके बारे में बेहतर जानकारी प्राप्त करें। आप quote_ident(table_schema) || '.' || quote_ident(table_name) tab_name . के स्थान पर ।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL 8.4 में कॉलम डेटाटाइप को कैरेक्टर से न्यूमेरिक में कैसे बदलें?

  2. विंडोज़ पर हरोकू पुल पोस्टग्रेस्क्ल

  3. रिटर्निंग क्लॉज के साथ इंसर्ट इन व्यू रूल को पोस्टग्रेज करता है

  4. एसक्यूएल क्वेरी से पहला और आखिरी रिकॉर्ड कैसे प्राप्त करें?

  5. डांसर और पोस्टग्रेज का उपयोग करते हुए एक साधारण लॉगिन/प्राधिकरण प्रणाली