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

पोस्टग्रेज पर टू फेज कमिट्स का उपयोग करना

मुझे लगता है कि आपने गलत समझा PREPARE TRANSACTION

वह कथन लेन-देन पर काम समाप्त करता है, अर्थात, इसे बाद जारी किया जाना चाहिए सभी काम किया जाता है। विचार यह है कि PREPARE TRANSACTION वह सब कुछ करता है जो कमिटमेंट के दौरान संभावित रूप से विफल हो सकता है सिवाय कमिटमेंट के। यह गारंटी देने के लिए है कि बाद में COMMIT PREPARED विफल नहीं हो सकता।

विचार यह है कि प्रसंस्करण इस प्रकार है:

  • START TRANSACTION Run चलाएं वितरित लेनदेन में शामिल सभी डेटाबेस पर।

  • सारे काम करो। यदि त्रुटियां हैं, तो ROLLBACK सभी लेन-देन।

  • PREPARE TRANSACTION चलाएं सभी डेटाबेस पर। यदि वह कहीं भी विफल हो जाता है, तो ROLLBACK PREPARED चलाएं उन डेटाबेस पर जहां लेनदेन पहले से ही तैयार था और ROLLBACK दूसरों पर।

  • एक बार PREPARE TRANSACTION हर जगह सफल रहा है, COMMIT PREPARED चलाएं सभी शामिल डेटाबेस पर।

इस तरह, आप कई डेटाबेस में "सभी या कुछ नहीं" की गारंटी दे सकते हैं।

यहां एक महत्वपूर्ण घटक जिसका मैंने उल्लेख नहीं किया है वह है वितरित लेनदेन प्रबंधक . यह सॉफ्टवेयर का एक टुकड़ा है जो लगातार याद रखता है कि वर्तमान में उपरोक्त एल्गोरिथम प्रसंस्करण कहाँ है ताकि यह एक दुर्घटना के बाद साफ या जारी रख सके।

एक वितरित लेनदेन प्रबंधक के बिना, दो-चरण की प्रतिबद्धता बहुत अधिक नहीं है, और यह वास्तव में खतरनाक है:यदि लेनदेन "तैयार" चरण में फंस जाते हैं, लेकिन अभी तक प्रतिबद्ध नहीं हैं, तो वे ताले रखना जारी रखेंगे और (के मामले में) PostgreSQL) ऑटोवैक्यूम काम को ब्लॉक करता है यहां तक ​​कि सर्वर के पुनरारंभ होने पर भी , क्योंकि ऐसे लेन-देन लगातार होने चाहिए।

इसे ठीक करना मुश्किल है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. स्प्रिंग बूट में JDBC और स्प्रिंग डेटा jpa का उपयोग करके मेरे सत्र वसंत के लिए अलग डेटा स्रोत बनाना

  2. PostgreSQL के साथ Capistrano, त्रुटि:डेटाबेस को अन्य उपयोगकर्ताओं द्वारा एक्सेस किया जा रहा है

  3. PostgreSQL पर फ़ंक्शन के अंदर चर घोषित नहीं कर सकता

  4. PostgreSQL संस्करण की जांच कैसे करें

  5. Postgresql बैकएंड के साथ Heroku पर एक रेल ऐप में COPY FROM का उपयोग करना