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

पोस्टग्रेज में एक विशिष्ट पंक्ति को लॉक करना

यदि आप किसी विशिष्ट चयनित पंक्ति में तालिका को लॉक करना चाहते हैं तो आपको LOCK FIRST वे FOR UPDATE / FOR SHARE . का उपयोग करते हैं कथन। उदाहरण के लिए, आपके मामले में यदि आपको पहली पंक्ति को लॉक करने की आवश्यकता है तो आप ऐसा करते हैं:

BEGIN;

LOCK TABLE person IN ROW EXCLUSIVE MODE;

-- BLOCK 1

SELECT * FROM person WHERE name = 'John' and money = 1 FOR UPDATE;

-- BLOCK 2

UPDATE person set name = 'John 2' WHERE name = 'John' and money = 1;

END;

BLOCK1 . में SELECT . से पहले कथन आप केवल डेटाबेस को बता रहे हैं "अरे, मैं इस तालिका में कुछ करूँगा, इसलिए जब मैं करता हूं, तो इस तालिका को इस मोड में लॉक करें"। आप किसी भी पंक्ति को चुन / अपडेट / हटा सकते हैं।

लेकिन BLOCK2 . में जब आप FOR UPDATE . का उपयोग करते हैं आप उस पंक्ति को अन्य लेन-देन के लिए विशिष्ट मोड में लॉक करते हैं (doc<पढ़ें। /ए> अधिक जानकारी के लिए)। लेन-देन समाप्त होने तक लॉक रहेगा।

यदि आपको एक उदाहरण की आवश्यकता है तो एक परीक्षण करें और दूसरा SELECT ... FOR UPDATE . करने का प्रयास करें BLOCK2 . में पहला लेनदेन समाप्त होने से पहले। यह पहले लेन-देन के समाप्त होने की प्रतीक्षा कर रहा होगा और इसके ठीक बाद का चयन करेगा।

मैं इसे बाद में नियंत्रित करने के लिए एक फ़ंक्शन में उपयोग कर रहा हूं और यह बहुत अच्छा है। आशा है कि आप आनंद लेंगे।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sqlalchemy और postgresql के साथ एन्कोडिंग त्रुटि

  2. पोस्टग्रेज़ फ़ंक्शन में अस्थायी तालिका को नहीं पहचानता है

  3. PostgreSQL में डेटाबेस में टेक्स्ट डेटा लोड करने का कोई तरीका है?

  4. मैं PostGIS से पृथ्वी पर दो बिंदुओं के बीच की दूरी कैसे प्राप्त कर सकता हूं?

  5. तैयार वक्तव्य पहले से मौजूद हैं