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

PostgreSQL में, एक ही तालिका में अलग-अलग पंक्तियों में कई अद्यतनों में परस्पर विरोधी ताले होते हैं?

अपडेट करें पंक्ति को लॉक करता है, इसलिए आपको इसे पहले लॉक करने की आवश्यकता नहीं है। अगर आप अपडेट करने की कोशिश करते हैं एक साथ पंक्तियों के अतिव्यापी सेट, दूसरा अद्यतन करें पहले लेन-देन के प्रतिबद्ध होने या वापस रोल करने की प्रतीक्षा करेगा।

आपके दृष्टिकोण के साथ बड़ी समस्या - इस तथ्य के अलावा कि अद्यतन करें कोई LIMIT नहीं है खंड - यह है कि कई कार्यकर्ता सभी एक ही पंक्तियों को हथियाने की कोशिश करेंगे। यहाँ क्या होता है:

  • कार्यकर्ता1:200 पंक्तियों को खोजने के लिए तालिका को फ़िल्टर करें और उन्हें लॉक करें
  • कार्यकर्ता1:पंक्तियों को अद्यतन करना प्रारंभ करता है
  • worker2:200 पंक्तियों को खोजने के लिए तालिका को फ़िल्टर करें
  • worker2:पंक्तियों को अपडेट करना शुरू करने का प्रयास करता है, लेकिन उसी पंक्तियों को कार्यकर्ता1 के रूप में चुना है ताकि यह कार्यकर्ता1 के लॉक पर ब्लॉक हो जाए
  • worker1:पंक्तियों को अपडेट करना समाप्त करता है
  • worker2:लॉक रिलीज होने के बाद, WHERE कंडीशन को फिर से चेक करें और पता करें कि कोई भी लाइन अब मेल नहीं खाती है क्योंकि वर्कर1 ने उन्हें अपडेट कर दिया है। शून्य पंक्तियों को अपडेट करता है।

... और दोहराएं!

आपको या तो चाहिए:

  • एक केंद्रीय कतार रखें पंक्तियों को उचित समवर्ती-सुरक्षित तरीके से सौंपना; या
  • कर्मचारियों को काम करने के लिए आईडी की गैर-अतिव्यापी श्रेणी असाइन करें

जहां तक ​​LIMIT का संबंध है - आप उपयोग कर सकते हैं - लेकिन आपको अपडेट करने के लिए पंक्तियों के एक ही सेट को चुनने वाले दोनों कर्मचारियों के साथ एक ही समस्या होगी।



  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. मैं Java और Postgres enums को अद्यतन के लिए एक साथ कैसे काम करूँ?

  3. एसक्यूएल ऐरे से स्ट्रिंग्स के ऐरे में परिणाम सेट को कनवर्ट करें

  4. स्प्रिंग डेटा R2dbc में तालिकाओं के बीच संबंधों को संभालने का सर्वोत्तम अभ्यास

  5. PostgreSQL डेटाबेस में सभी संग्रहीत प्रक्रियाओं को सूचीबद्ध करने के 3 तरीके