हाल के पोस्टग्रेज संस्करणों में, एक कब
है क्लॉज जिसे आप सशर्त रूप से ट्रिगर को सक्रिय करने के लिए उपयोग कर सकते हैं। आप इसे इस तरह इस्तेमाल कर सकते हैं:
... when (old.* is distinct from new.*) ...
मैं 100% नहीं हूं यह काम करेगा (एटीएम का परीक्षण नहीं कर सकता):
... when (current_user = 'foo') ...
(यदि नहीं, तो इसे अपने plpgsql में if ब्लॉक में रखने का प्रयास करें।)
http://www.postgresql.org/docs/current/static /sql-createtrigger.html
([col_name] . का [पहले|बाद] अपडेट भी है सिंटैक्स, लेकिन मुझे यह कम उपयोगी लगता है क्योंकि कॉलम का मान समान रहने पर भी यह सक्रिय हो जाएगा।)
इस अतिरिक्त नोट को जोड़कर, यह देखते हुए कि @ क्रेगरिंगर का उत्तर हाइलाइट करता है कि आप क्या कर रहे हैं...
सशर्त ट्रिगर्स का उपयोग करके सेल्सफोर्स और पोस्टग्रेज़ के बीच मास्टर-मास्टर प्रतिकृति स्थापित करने का प्रयास करना, मुझे लगता है, एक पाइप सपना है। बस इसे भूल जाओ... इसके अलावा और भी बहुत कुछ होने वाला है:आपको डेटा को दोनों सिरों पर उचित रूप से लॉक करने की आवश्यकता होगी (जो कि उचित तरीके से संभव नहीं होगा), परिणामी गतिरोध का प्रबंधन करें (जो हो सकता है कि स्वचालित रूप से पता न चले), और परस्पर विरोधी डेटा से निपटें।
एक छोटी टीम के साथ इसे सफलतापूर्वक पूरा करने की आपकी संभावना लगभग शून्य है - खासकर यदि आपके पोस्टग्रेज कौशल उस स्तर पर हैं जहां मैनुअल पढ़ने में समय लगाने से आपके अपने सवालों का जवाब मिलेगा। आप सुरक्षित रूप से शर्त लगा सकते हैं कि Salesforce या कुछ प्रमुख SQL शॉप (जैसे कि एक क्रेग के लिए काम करता है) में अधिक सक्षम व्यक्ति को वही माना जाता है, और या तो बुरी तरह से विफल हो जाता है या इसे खारिज कर दिया जाता है।
इसके अलावा, मैं इस बात पर जोर दूंगा कि कुशल, तुल्यकालिक, बहु-मास्टर प्रतिकृति को लागू करना नहीं है एक हल की गई समस्या। आपने सही पढ़ा:नहीं हल किया। अभी कुछ साल पहले, बिल्कुल कर रहा था पोस्टग्रेज कोर में इसे बनाने के लिए पर्याप्त रूप से हल नहीं किया गया था। तो आपके पास कोई पूर्व कला नहीं है जो आपके काम को आधार बनाने और उस पर पुनरावृति करने के लिए अच्छी तरह से काम करती है।