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

DBIx::Class::ResultSet की find_or_create विधि का उपयोग करते समय दौड़ की स्थिति से कैसे बचें?

नहीं, दस्तावेज गलत है। अकेले लेन-देन का उपयोग करना नहीं . है इस समस्या से बचें। यह केवल गारंटी देता है कि यदि कोई अपवाद होना चाहिए तो पूरे लेनदेन को वापस ले लिया जाता है - ताकि कोई असंगत स्थिति डेटाबेस के लिए जारी न रहे।

से बचने . के लिए यह समस्या आपको तालिका को लॉक करना होगा - लेनदेन के अंदर, क्योंकि लेनदेन के अंत में सभी ताले जारी किए जाते हैं। कुछ इस तरह:

BEGIN;
LOCK TABLE mytbl IN SHARE MODE;

-- do your find_or_create here

COMMIT;

लेकिन यह सब कुछ के लिए एक जादुई इलाज नहीं है। यह एक प्रदर्शन समस्या बन सकता है, और गतिरोध . हो सकता है (समवर्ती लेनदेन पारस्परिक रूप से उन संसाधनों को लॉक करने का प्रयास कर रहे हैं जिन्हें दूसरे ने पहले ही लॉक कर दिया है)। PostgreSQL ऐसी स्थिति का पता लगाएगा और प्रतिस्पर्धी लेनदेन में से एक को छोड़कर सभी को रद्द कर देगा। विफलता पर आपको ऑपरेशन के लिए फिर से प्रयास करने के लिए तैयार रहना चाहिए।

लॉक के बारे में 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. MacOS पर PostgreSQL लॉग कहाँ हैं?

  2. विंडोज के लिए पोस्टग्रेएसक्यूएल विकसित करना, भाग 3

  3. psql और puTTY के माध्यम से पोस्टग्रेज से जुड़े होने पर auto_increment में त्रुटि

  4. PostgreSQL में एक तिथि से वर्ष निकालें

  5. psycopg2 और SQL इंजेक्शन सुरक्षा