मूल रूप से हम प्रत्येक तालिका के लिए एक ट्राइगर बनाना चाहेंगे जिसे हम एक अद्यतन / इन्सर्ट / DELETE संचालन के लिए अधिसूचित करना चाहते हैं। एक बार जब यह ट्रिगर आग लगाता है तो यह एक फ़ंक्शन को निष्पादित करेगा जो बस एक नई पंक्ति (ईवेंट को एन्कोडिंग) करेगा एक लॉग टेबल पर जिसे हम फिर एक बाहरी सेवा से पोल करेंगे।
यह एक ट्रिगर के लिए एक सुंदर मानक उपयोग है।
Postgres TRIGGER (ओं) के साथ सभी में जाने से पहले हम यह जानना चाहेंगे कि वे किस पैमाने पर हैं: हम एक ही Postgres स्थापना पर कितने ट्रिगर बना सकते हैं?
यदि आप उन्हें बनाते रहते हैं, तो अंततः आप डिस्क स्थान से बाहर निकल जाएंगे।
ट्रिगर्स के लिए कोई विशिष्ट सीमा नहीं है।
PostgreSQL सीमाएँ पृष्ठ के बारे में प्रलेखित हैं ।
क्या वे क्वेरी प्रदर्शन को प्रभावित करते हैं?
यह ट्रिगर प्रकार, ट्रिगर भाषा और ट्रिगर क्या करता है पर निर्भर करता है।
एक साधारण PL / PgSQL BEFORE ... FOR EACH STATEMENTट्रिगर जो कुछ भी नहीं करता है उसके पास शून्य-शून्य ओवरहेड है।
FOR EACH ROWट्रिगर्स में ट्रिगर्स की तुलना में अधिक ओवरहेड होता FOR EACH STATEMENTहै। स्केलिंग, स्पष्ट रूप से, प्रभावित पंक्ति मायने रखती है।
AFTERट्रिगर्स ट्रिगर्स की तुलना में अधिक महंगे हैं BEFOREक्योंकि उन्हें तब तक कतारबद्ध होना चाहिए जब तक कि स्टेटमेंट अपने काम को पूरा नहीं करता है, तब निष्पादित किया जाता है। यदि डिस्क बड़ी हो जाती है तो वे डिस्क पर नहीं जाते हैं (कम से कम 9.4 और नीचे, भविष्य में बदल सकते हैं) इसलिए बहुत बड़ी AFTERट्रिगर कतार स्मृति को ओवररन करने का कारण बन सकती है, जिसके परिणामस्वरूप बयान निरस्त हो सकता है।
एक ट्रिगर जो NEWडालने / अद्यतन करने से पहले पंक्ति को संशोधित करता है वह एक ट्रिगर की तुलना में सस्ता है जो डीएमएल करता है।
विशिष्ट उपयोग का मामला जो आप चाहते हैं वह इन-प्रोग्रेस एन्हांसमेंट के साथ बेहतर प्रदर्शन करेगा जो इसे PostgreSQL 9.5 (यदि हम भाग्यशाली हैं) में बना FOR EACH STATEMENTसकते हैं , जहां ट्रिगर वर्चुअल OLDऔर NEWटेबल देख सकते हैं । वर्तमान PostgreSQL संस्करणों में यह संभव नहीं है, इसलिए आपको FOR EACH ROWइसके बजाय ट्रिगर्स का उपयोग करना होगा ।
क्या इससे पहले किसी ने कोशिश की थी?
बेशक। यह ट्रिगर्स के लिए एक बहुत मानक उपयोग है, साथ ही ऑडिटिंग, पवित्रता जाँच आदि।
टास्क टेबल में बदलाव होने पर आप अपने कार्यकर्ता को जगाने के लिए LISTENऔर NOTIFYअच्छे तरीके से देखना चाहेंगे ।
आप पहले से ही ट्रिगर्स से सीधे बाहरी सिस्टम पर बात करने से बचकर सबसे महत्वपूर्ण काम कर रहे हैं। यह प्रदर्शन और विश्वसनीयता के लिए समस्याग्रस्त है। लोग अक्सर एक ट्रिगर से सीधे मेल भेजने जैसे काम करने की कोशिश करते हैं, और यह बुरी खबर है।