वैसे वहाँ कोई डेटाबेस चौड़ा ट्रिगर रचना है, लेकिन सभी तरह के थोक-admin-संचालन के लिए आप 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
या pgAdmin द्वारा) की जरूरत है ।
अब कुछ स्पष्टीकरण:
- मैं अपने डेटाबेस
information_schema.tables
प्रणाली तालिका का उपयोग कर में तालिकाओं के नाम का चयन करें। चूंकि सचमुच सभी तालिकाओं का डेटा है, pg_catalog
और स्कीमा और टोस्ट टेबल को अपने select
से बाहर करना याद रखें।
- मैं
quote_ident(text)
फ़ंक्शन का उपयोग करता हूं जो आवश्यक होने पर डबल कोट संकेत (""
) के अंदर स्ट्रिंग डाल देगा (यानी रिक्त स्थान या पूंजी अक्षरों वाले नामों की आवश्यकता होती है)।
- जब मेरे पास टेबल नामों की सूची है तो मैं अपने SQL आदेश प्राप्त करने के लिए बस कुछ स्थिर तारों के साथ उन्हें जोड़ता हूं।
- मैं उप-क्वेरी का उपयोग करके उस आदेश को लिखता हूं क्योंकि मैं चाहता हूं कि आप यहां क्या हो रहा है इसके बारे में बेहतर विचार प्राप्त करें।
tab_name
के स्थान पर quote_ident(table_schema) || '.' || quote_ident(table_name)
डालकर आप एक ही प्रश्न लिख सकते हैं।
स्रोत
2015-10-21 18:49:40
नहीं, डेटाबेस-व्यापी ट्रिगर्स के लिए कोई समर्थन नहीं है। आप इस कण चीज को वैसे भी क्यों करना चाहेंगे? –
मुझे स्मार्टफ़ोन के साथ सिंक करने के लिए डेटाबेस क्रियाएं रिकॉर्ड करने की आवश्यकता है। फिर मैं इस ट्रिगर टेबल को टेबल से चलाऊंगा। मदद के लिए धन्यवाद। –
@EduardoRafaelCorreadeSouza मुझे पता है कि कुछ दिन बीत चुके हैं क्योंकि आपने उस सवाल से पूछा है और शायद आपने इसे हाथ से किया है। लेकिन मेरा जवाब देखें। यदि यह आपको कुछ उपयोगी सीखता है जो भविष्य में आपको समान कार्य के साथ मदद कर सकता है तो मेरे जवाब को स्वीकार करने पर विचार करना अच्छा होगा। –