में डेडलॉक का पता चला है, मुझे अपने PostgreSQL डेटाबेस में पीएल/पीजीएसक्यूएल फ़ंक्शन से डेडलॉक समस्या का सामना करना पड़ रहा है। कृपया कोड ब्लॉक में SQL कथन पाएं (उदाहरण के लिए):पीएल/पीजीएसक्यूएल फ़ंक्शन
BEGIN
UPDATE accounts SET balance = 0 WHERE acct_name like 'A%';
UPDATE accounts SET balance = balance + 100 WHERE acct_name like '%A';
EXCEPTION WHEN OTHERS THEN RAISE NOTICE SQLERRM;
END;
मुझे पता चला है कि इस कथन के दौरान हुई डेडलॉक चल रही थी। लेकिन मुझे यकीन नहीं है कि इस तालिका को एक ही समय में अपडेट करने का प्रयास करने वाले अन्य बयान थे (क्योंकि मुझे लॉगिंग सिस्टम में कोई नहीं मिला)।
तो, क्या यह संभव है कि इस कथन के भीतर डेडलॉक हुआ? जहां तक मुझे पता है, अगर हमने BEGIN
/END
के साथ पूरे कथन को अवरुद्ध कर दिया है। वही लेनदेन होगा और खुद ही बंद नहीं किया जाना चाहिए।
क्या आपके पास खातों पर कोई ट्रिगर है? क्या आप स्पष्ट लॉकिंग का भी उपयोग करते हैं? – strkol
डिफ़ॉल्ट रूप से, एक लेनदेन अन्य लेनदेन द्वारा किए गए परिवर्तनों का निरीक्षण कर सकता है। अधिक जानकारी के लिए, PostgreSQL दस्तावेज़ से [लेनदेन अलगाव] (http://www.postgresql.org/docs/current/static/transaction-iso.html) देखें। –
@strkol हाँ मेरे पास है, लेकिन उस ट्रिगर में कथन इस तालिका से संबंधित नहीं है। स्पष्ट लॉकिंग के लिए भी हाँ है। –