2010-08-25 21 views
12

मैं कभी कभी डेटाबेस 17607 के संबंध 17720 के टपल (889,66) पर ExclusiveLock के लिएPostgresql वस्तु आईडी और tuples

प्रक्रिया 12990 प्रतीक्षा करता है की तरह संदेशों को देखने के; प्रक्रिया 12 992 द्वारा अवरुद्ध।

तो निश्चित रूप से 'प्रक्रिया' भाग काफी स्पष्ट है, लेकिन मुझे नहीं पता कि संबंध आईडी और मानव पठनीय नाम के बीच कैसे सहसंबंध होना है। मैं वास्तव में नहीं जानता कि टुपल बिट को क्या करना है।

कोई भी जानता है कि इन संदेशों को कैसे पढ़ा जाए और उनसे उपयोगी डेटा कैसे प्राप्त किया जाए?

धन्यवाद!

उत्तर

13

आप इसे सिस्टम टेबल देख सकते हैं: यहां रुचि में से एक pg_class है।

तरह

SELECT OID, relname FROM pg_class 
oid |    relname    
-------+------------------------------------ 
    1247 | pg_type 
11550 | user_mapping_options 
11554 | user_mappings 
11494 | triggered_update_columns 
11497 | triggers 

या बल्कि

SELECT relname FROM pg_class WHERE OID=17720 

एक प्रश्न कर ताले पर प्रकाश डाला सकता है।

+0

धन्यवाद! मैंने मैपिंग के संबंध में आईडी को समझ लिया, लेकिन अभी भी यह सुनिश्चित नहीं है कि tuples का क्या करना है ... – user431221

+0

असल में, मुझे स्पष्टीकरण देना चाहिए - यह सुनिश्चित नहीं करना चाहिए कि ट्यूपल नोटेशन (x, y) कैसे पढ़ा जाए और मैं इसका उपयोग कैसे कर सकता हूं डेडलॉक – user431221

+0

ठीक क्या हुआ, डेटा का एक और बिट मिला - संख्या लेनदेन आईडी हैं जो टुपल/पंक्ति डाली या हटा दी गई हैं। क्या कोई तरीका है कि मुझे यह पता चल सकता है कि कौन से एसक्यूएल लेनदेन चल रहे थे? – user431221

17

एक "संबंध" एक तालिका है और एक "टुपल" एक पंक्ति है।

यहाँ (आप भी pg_class तालिका क्वेरी कर सकते हैं) तालिका आईडी से तालिका के नाम प्राप्त करने के लिए a nice shortcut है:

=> select 17720::regclass; 
┌──────────┐ 
│ regclass │ 
├──────────┤ 
│ my_table │ 
└──────────┘ 
(1 row) 

अब कैसे पंक्ति के बारे में? "टुपल बिट" tuple identifier है, और आपके डेटाबेस में प्रत्येक तालिका में system column है जिसे ctid कहा जाता है जहां उन पहचानकर्ता संग्रहीत किए जाते हैं। अब जब हम प्रश्न में तालिका जानते हैं, तो हम कर सकते हैं:

=> select * from my_table where ctid='(889,66)'; 

हालांकि! सिस्टम कॉलम डॉक्स से (जोर जोड़ा गया): "[ए] हालांकि सीटीआईडी ​​का उपयोग पंक्ति संस्करण को बहुत तेज़ी से ढूंढने के लिए किया जा सकता है, एक पंक्ति का सीटीआईडी ​​ बदल देगा यदि इसे वैक्यूम पूर्ण द्वारा अपडेट या स्थानांतरित किया गया है। इसलिए सीटीआईडी ​​बेकार है एक दीर्घकालिक पंक्ति पहचानकर्ता। " दूसरे शब्दों में, यदि आप पर्याप्त तेज़ी से हैं तो आप शायद भरोसा कर सकते हैं कि लौटाई गई पंक्ति डेडलॉक में शामिल है, लेकिन वह जानकारी हमेशा के लिए उपलब्ध नहीं होगी।

+0

उस के लिए धन्यवाद - उपयोगी और स्पष्ट! – zeroDivisible

संबंधित मुद्दे