कड़ाई से बोलते हुए, Postgres के पास है . नहीं था संग्रहीत प्रक्रियाएं जैसा कि संस्करण 11 से पहले आईएसओ/आईईसी मानक में परिभाषित किया गया है। इस शब्द का प्रयोग अक्सर कार्यों के संदर्भ में गलत तरीके से किया जाता है। , जो अन्य RDBMS "संग्रहीत कार्यविधियों" के साथ प्रदान की जाने वाली समान कार्यक्षमता (और अधिक) प्रदान करते हैं। लेन-देन प्रबंधन में मुख्य अंतर है।
- “संग्रहीत कार्यविधियाँ” और “संग्रहीत कार्य” में क्या अंतर हैं?
सही संग्रहीत प्रक्रियाएं अंत में Postgres 11 के साथ पेश किया गया:
- संग्रहीत कार्यविधि/उपयोगकर्ता-परिभाषित फ़ंक्शन का उपयोग कब करें?
कार्य परमाणु हैं पोस्टग्रेज में और स्वचालित रूप से अपने लेनदेन के अंदर चलते हैं जब तक कि बाहरी लेनदेन के भीतर नहीं बुलाया जाता है। वे हमेशा एक ही लेन-देन में चलते हैं और सफल या असफल पूरी तरह से . नतीजतन, कोई फ़ंक्शन के भीतर लेनदेन शुरू या प्रतिबद्ध नहीं कर सकता है। और कमांड जैसे VACUUM
, CREATE DATABASE
, या CREATE INDEX CONCURRENTLY
जो लेन-देन के संदर्भ में नहीं चलते हैं, उनकी अनुमति नहीं है।
PL/pgSQL पर मैनुअल:
<ब्लॉकक्वॉट>
कार्यों और ट्रिगर प्रक्रियाओं को हमेशा बाहरी क्वेरी द्वारा स्थापित लेनदेन के भीतर निष्पादित किया जाता है - वे उस लेनदेन को शुरू या प्रतिबद्ध नहीं कर सकते हैं, क्योंकि उनके लिए निष्पादित करने के लिए कोई संदर्भ नहीं होगा। हालांकि, एक ब्लॉक जिसमें EXCEPTION
होता है खंड प्रभावी रूप से एक उप-लेनदेन बनाता है जिसे बाहरी लेनदेन को प्रभावित किए बिना वापस लाया जा सकता है।
त्रुटि प्रबंधन:
<ब्लॉकक्वॉट>
डिफ़ॉल्ट रूप से, PL/pgSQL फ़ंक्शन में होने वाली कोई भी त्रुटि फ़ंक्शन के निष्पादन को रोक देती है, और वास्तव में आसपास के लेन-देन में भी। आप BEGIN
. का उपयोग करके त्रुटियों को ट्रैप कर सकते हैं और उनसे उबर सकते हैं एक EXCEPTION
के साथ ब्लॉक करें खंड।
अपवाद हैं , सहित लेकिन इन्हीं तक सीमित नहीं:
- फ़ाइलों को लॉग करने के लिए लिखा गया डेटा
-
अनुक्रम में किए गए परिवर्तन
<ब्लॉकक्वॉट>महत्वपूर्ण :कुछ PostgreSQL डेटा प्रकारों और कार्यों में लेनदेन संबंधी व्यवहार के संबंध में विशेष नियम होते हैं। विशेष रूप से, अनुक्रम में किए गए परिवर्तन (और इसलिए
serial
. का उपयोग करके घोषित कॉलम का काउंटर ) अन्य सभी लेन-देनों के लिए तुरंत दृश्यमान होते हैं और यदि परिवर्तन करने वाले लेन-देन को निरस्त कर दिया जाता है तो वे रोलबैक नहीं होते हैं। -
तैयार बयान
- एसक्यूएल फिडल डेमो
-
dblink कॉल (या समान)
- क्या Postgres नेस्टेड या स्वायत्त लेनदेन का समर्थन करता है?