उत्कृष्ट-हमेशा की तरह depesz आलेख, और pg-message-queue देखें।
डेटाबेस से सीधे ईमेल भेजना एक अच्छा विचार नहीं हो सकता है। क्या होगा यदि DNS रिज़ॉल्यूशन धीमा है और सब कुछ 30 सेकंड के लिए हैंग हो जाता है तो समय समाप्त हो जाता है? क्या होगा यदि आपका मेल सर्वर डगमगा रहा है और 5 मिनट . लेता है संदेशों को स्वीकार करने के लिए? जब तक आप max_connections
. पर नहीं होंगे, तब तक आपको अपने ट्रिगर में डेटाबेस सत्र लटकाए रहेंगे और अचानक आप कुछ भी नहीं कर सकते लेकिन प्रतीक्षा करें या लेनदेन को मैन्युअल रूप से रद्द करना शुरू करें।
मेरा सुझाव है कि आपका ट्रिगर NOTIFY
एक LISTEN
आईएनजी सहायक स्क्रिप्ट जो स्थायी रूप से चलती रहती है और डीबी से जुड़ी होती है (लेकिन लेनदेन में नहीं)।
आपको बस इतना करना है INSERT
एक कतार तालिका में एक पंक्ति और एक NOTIFY
. भेजें . आपकी स्क्रिप्ट को NOTIFY
. मिलता है संदेश क्योंकि यह LISTEN
. में पंजीकृत है इसके लिए, क्यू टेबल की जांच करता है, और बाकी काम करता है।
आप किसी भी भाषा में हेल्पर प्रोग्राम लिख सकते हैं जो सुविधाजनक हो; मैं आमतौर पर psycopg2
. के साथ पायथन का उपयोग करता हूं ।
वह स्क्रिप्ट डेटाबेस में मिली जानकारी के आधार पर ईमेल भेज सकती है। आपको पीएल/पीजीएसक्यूएल में सभी बदसूरत टेक्स्ट स्वरूपण करने की ज़रूरत नहीं है, आप चीजों को एक अधिक शक्तिशाली स्क्रिप्टिंग भाषा में टेम्पलेट में प्रतिस्थापित कर सकते हैं, और जब कोई NOTIFY
डेटाबेस से परिवर्तनीय डेटा प्राप्त कर सकता है> में आता है।
इस दृष्टिकोण के साथ आपका सहायक प्रत्येक संदेश भेज सकता है और उसके बाद ही कतार तालिका से जानकारी निकाल सकता है। इस तरह यदि आपके मेल सिस्टम में अस्थायी समस्याएं हैं जिसके कारण भेजना विफल हो जाता है, तो आपने जानकारी नहीं खोई है और जब तक आप सफल नहीं हो जाते, तब तक इसे भेजने का प्रयास जारी रख सकते हैं।
यदि आपको वास्तव में डेटाबेस में ऐसा करना है, तो PgMail देखें।