PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

क्या पोस्टग्रेज में डेटाबेस लेनदेन में संग्रहीत कार्यविधियाँ चलती हैं?

कड़ाई से बोलते हुए, Postgres के पास है . नहीं था संग्रहीत प्रक्रियाएं जैसा कि संस्करण 11 से पहले आईएसओ/आईईसी मानक में परिभाषित किया गया है। इस शब्द का प्रयोग अक्सर कार्यों के संदर्भ में गलत तरीके से किया जाता है। , जो अन्य RDBMS "संग्रहीत कार्यविधियों" के साथ प्रदान की जाने वाली समान कार्यक्षमता (और अधिक) प्रदान करते हैं। लेन-देन प्रबंधन में मुख्य अंतर है।

  • “संग्रहीत कार्यविधियाँ” और “संग्रहीत कार्य” में क्या अंतर हैं?

सही संग्रहीत प्रक्रियाएं अंत में Postgres 11 के साथ पेश किया गया:

  • संग्रहीत कार्यविधि/उपयोगकर्ता-परिभाषित फ़ंक्शन का उपयोग कब करें?

कार्य परमाणु हैं पोस्टग्रेज में और स्वचालित रूप से अपने लेनदेन के अंदर चलते हैं जब तक कि बाहरी लेनदेन के भीतर नहीं बुलाया जाता है। वे हमेशा एक ही लेन-देन में चलते हैं और सफल या असफल पूरी तरह से . नतीजतन, कोई फ़ंक्शन के भीतर लेनदेन शुरू या प्रतिबद्ध नहीं कर सकता है। और कमांड जैसे VACUUM , CREATE DATABASE , या CREATE INDEX CONCURRENTLY जो लेन-देन के संदर्भ में नहीं चलते हैं, उनकी अनुमति नहीं है।

PL/pgSQL पर मैनुअल:

<ब्लॉकक्वॉट>

कार्यों और ट्रिगर प्रक्रियाओं को हमेशा बाहरी क्वेरी द्वारा स्थापित लेनदेन के भीतर निष्पादित किया जाता है - वे उस लेनदेन को शुरू या प्रतिबद्ध नहीं कर सकते हैं, क्योंकि उनके लिए निष्पादित करने के लिए कोई संदर्भ नहीं होगा। हालांकि, एक ब्लॉक जिसमें EXCEPTION होता है खंड प्रभावी रूप से एक उप-लेनदेन बनाता है जिसे बाहरी लेनदेन को प्रभावित किए बिना वापस लाया जा सकता है।

त्रुटि प्रबंधन:

<ब्लॉकक्वॉट>

डिफ़ॉल्ट रूप से, PL/pgSQL फ़ंक्शन में होने वाली कोई भी त्रुटि फ़ंक्शन के निष्पादन को रोक देती है, और वास्तव में आसपास के लेन-देन में भी। आप BEGIN . का उपयोग करके त्रुटियों को ट्रैप कर सकते हैं और उनसे उबर सकते हैं एक EXCEPTION के साथ ब्लॉक करें खंड।

अपवाद हैं , सहित लेकिन इन्हीं तक सीमित नहीं:

  • फ़ाइलों को लॉग करने के लिए लिखा गया डेटा
  • अनुक्रम में किए गए परिवर्तन

    <ब्लॉकक्वॉट>

    महत्वपूर्ण :कुछ PostgreSQL डेटा प्रकारों और कार्यों में लेनदेन संबंधी व्यवहार के संबंध में विशेष नियम होते हैं। विशेष रूप से, अनुक्रम में किए गए परिवर्तन (और इसलिए serial . का उपयोग करके घोषित कॉलम का काउंटर ) अन्य सभी लेन-देनों के लिए तुरंत दृश्यमान होते हैं और यदि परिवर्तन करने वाले लेन-देन को निरस्त कर दिया जाता है तो वे रोलबैक नहीं होते हैं।

  • तैयार बयान

    • एसक्यूएल फिडल डेमो
  • dblink कॉल (या समान)

    • क्या Postgres नेस्टेड या स्वायत्त लेनदेन का समर्थन करता है?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL टाइमस्टैम्प्टज़ प्रकार में समय क्षेत्र को सुरक्षित रखें

  2. MySQL बनाम PostgreSQL? मुझे अपने Django प्रोजेक्ट के लिए किसे चुनना चाहिए?

  3. शामिल होने के साथ पोस्टग्रेस्क्ल अपडेट

  4. मैं psycopg2/पायथन डीबी एपीआई के साथ डेटाबेस लेनदेन कैसे करूं?

  5. केवल SQL का उपयोग करके पूर्व-अद्यतन स्तंभ मान लौटाएं