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

अगले चुनिंदा पोस्टग्रेज तक पंक्तियों को लॉक करें

मुझे नहीं लगता कि यह संभव है। आप किसी तालिका में केवल पढ़ने के लिए पहुंच को अवरुद्ध नहीं कर सकते (जब तक कि चयन नहीं किया जाता है FOR UPDATE )

जहां तक ​​मैं बता सकता हूं, आपके पास pg_advisory_lock() का उपयोग करने का एकमात्र मौका है समारोह।
http://www .postgresql.org/docs/current/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS

लेकिन इसके लिए इसके माध्यम से प्राप्त तालों की "मैनुअल" रिलीज की आवश्यकता होती है। इसके साथ आपको स्वचालित अनलॉकिंग नहीं मिलेगी।

पंक्तियों को लॉक करने के लिए आपको कुछ इस तरह की आवश्यकता होगी:

select pg_advisory_lock(id), * 
from 
( 
  select * table1 order by id limit 5
) t

(LIMIT भाग के लिए व्युत्पन्न तालिका के उपयोग पर ध्यान दें। स्पष्टीकरण के लिए मैंने जो मैन्युअल लिंक पोस्ट किया है उसे देखें)

फिर आपको प्राप्त आईडी को स्टोर करना होगा और बाद में pg_advisory_unlock() पर कॉल करना होगा। प्रत्येक आईडी के लिए।

यदि प्रत्येक प्रक्रिया हमेशा सभी releasing जारी कर रही है आईडी एक बार में, आप बस pg_advisory_unlock_all() . का उपयोग कर सकते हैं बजाय। फिर आपको प्राप्त आईडी को संग्रहीत करने की आवश्यकता नहीं होगी।

ध्यान दें कि यह नहीं होगा दूसरों को "सामान्य" चयनों का उपयोग करके पंक्तियों को पढ़ने से रोकें। यह तभी काम करेगा जब उस तालिका तक पहुंचने वाली प्रत्येक प्रक्रिया ताले प्राप्त करने के समान पैटर्न का उपयोग करती है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. शामिल होने में डुप्लिकेट फ़ील्ड को छोड़कर

  2. पोस्टजीआईएस इन एक्शन

  3. अपने डेटा खोए बिना लार्वा 5 माइग्रेशन का उपयोग करके किसी तालिका में कॉलम कैसे जोड़ें?

  4. जटिल संबंधों के साथ कई तालिकाओं को क्वेरी करना

  5. पृष्ठांकित पंक्तियाँ और एकल क्वेरी में कुल गणना प्राप्त करें