आप इस समस्या को निम्न अनुक्रमणिका से ठीक कर सकते हैं:
CREATE INDEX accounts_user_idx ON accounts(user_id);
चूंकि आपकी उदाहरण तालिका में बहुत कम डेटा है, इसलिए आपको PostgreSQL को इंडेक्स स्कैन का उपयोग करने के लिए कहना होगा:
SET enable_seqscan=off;
अब आपका उदाहरण काम करेगा!
यदि यह काले जादू की तरह लगता है, तो अपने SELECT
. की क्वेरी निष्पादन योजनाओं पर एक नज़र डालें और UPDATE
बयान।
अनुक्रमणिका के बिना दोनों टेबल पर अनुक्रमिक स्कैन का उपयोग करेंगे, इस प्रकार तालिका में सभी पंक्तियों को पढ़ेंगे . तो दोनों लेन-देन एक SIReadLock
के साथ समाप्त होंगे पूरी मेज पर।
यह क्रमांकन विफलता को ट्रिगर करता है।