क्या कोई जानता है कि पोस्टग्रेस 9.1 में किसी तालिका के ओआईडी को कैसे ढूंढें? मैं एक अद्यतन स्क्रिप्ट लिख रहा हूं जिसे कॉलम बनाने की कोशिश करने से पहले तालिका में कॉलम के अस्तित्व के परीक्षण की आवश्यकता है। यह पहली बार त्रुटि से बाहर होने के बाद स्क्रिप्ट को चलाने से रोकने के लिए है।पोस्टग्रेज़ 9.1 में किसी तालिका के ओआईडी को निर्धारित करना?
उत्तर
पोस्टग्रेस कैटलॉग तालिका pg_class
आपको यह देखना चाहिए कि आपको क्या देखना चाहिए। कॉलम relname
में तालिका नाम के साथ प्रति पंक्ति एक पंक्ति होनी चाहिए, और छुपा कॉलम oid
में ओड होना चाहिए।
कैटलॉग टेबल postgres
डेटाबेस में हैं, इसलिए अपने एप्लिकेशन डेटाबेस की बजाय उससे कनेक्ट करना सुनिश्चित करें।
आपको pg_attribute
कैटलॉग तालिका में भी रुचि हो सकती है, जिसमें प्रति पंक्ति कॉलम में एक पंक्ति शामिल है।
देखें: http://www.postgresql.org/docs/current/static/catalog-pg-class.html और http://www.postgresql.org/docs/current/static/catalog-pg-attribute.html
एक मेज OID प्राप्त करने के लिए एक सरल तरीका है। search_path
में पहली स्कीमा के
SELECT 'mytbl'::regclass::oid;
यह चूक या एक अपवाद को जन्म देती है, तो नहीं मिला:
object-identifier class
regclass
(कनेक्ट रहते हुए संबंधित डीबी करने के लिए) के लिए कास्ट।
या स्पष्ट रूप स्कीमा योग्य: बाद में तुम भी
to_regclass('mytbl')
उपयोग कर सकते हैं
SELECT TRUE AS col_exists
FROM pg_attribute
WHERE attrelid = 'mytbl'::regclass
AND attname = 'mycol'
AND NOT attisdropped -- no dropped (dead) columns
-- AND attnum > 0 -- no system columns (you may or may not want this)
Postgres 9.4 में या:
SELECT 'myschema.mytbl'::regclass::oid;
तो फिर तुम केवल स्तंभ के अस्तित्व के लिए सूची तालिका pg_attribute
का निरीक्षण करने की जरूरत है , जो टेबल नहीं मिला है, तो अपवाद नहीं उठाता है:
बस संभावनाओं को पूरा करने मैं जोड़ने के लिए कोई त्रुटि बाहर करने के लिए कॉलम को छोड़ने के लिए एक वाक्य रचना मौजूद है करना चाहते हैं:
ALTER तालिका mytbl ड्रॉप स्तंभ अगर मौजूद है mycol
http://www.postgresql.org/docs/9.0/static/sql-altertable.html
फिर आप सुरक्षित रूप से अपना कॉलम जोड़ सकते हैं।
SELECT oid FROM pg_class WHERE relname = 'tbl_name' AND relkind = 'r';
स्पष्टीकरण अच्छा होगा ... – eirikir
- 1. पोस्टग्रेज़ को पुनरारंभ करना
- 2. किसी तालिका में बाधाओं को प्रदर्शित करना
- 3. पोस्टग्रेज़ में तालिका में शामिल होने के लिए
- 4. प्रमाण पत्र के विषय के लिए ओआईडी की तालिका?
- 5. वैकल्पिक तालिका, शून्य कॉलम में शून्य सेट करें, पोस्टग्रेएसक्यूएल 9.1
- 6. पोस्टग्रेज़ में एक तालिका के लिए क्वेरी अनुदान
- 7. पोस्टग्रेज़ 9.0
- 8. किसी तालिका के लिए स्कीमा प्राप्त करना
- 9. रनटाइम पर किसी ऑब्जेक्ट के क्लास पदानुक्रम को निर्धारित करना
- 10. पोस्टग्रेज़
- 11. पोस्टग्रेज़
- 12. किसी अन्य डेटाबेस में किसी तालिका का उपयोग करना
- 13. पोस्टग्रेज़ में सलाहकार ताले प्राप्त करना
- 14. किसी MySQL तालिका में सम्मिलित करना और किसी भी मौजूदा डेटा को ओवरराइट करना
- 15. पोस्टग्रेज़
- 16. MySQL में किसी तालिका के लिए पंक्ति गणना प्राप्त करना?
- 17. ADO.Net इकाई मॉडल में किसी अन्य तालिका में किसी विदेशी तालिका के साथ तालिका को आप कैसे अपडेट करते हैं?
- 18. पोस्टग्रेज़ में, आप किसी विशेष कॉलम के लिए संभावित मानों को कैसे प्रतिबंधित करते हैं?
- 19. एसएनएमपी: कस्टम ओआईडी
- 20. किसी तालिका में किसी अन्य तालिका में मानों के आधार पर रिकॉर्ड्स को कैसे हटाएं?
- 21. Postgres 9.1 GRANT
- 22. पोस्टग्रेज़
- 23. पोस्टग्रेज़ डेटाबेस में एक ही तालिका का बैकअप कैसे बनाएं?
- 24. पोस्टग्रेज़
- 25. पोस्टग्रेज़
- 26. धागे के स्रोत को निर्धारित करना
- 27. पोस्टग्रेज़
- 28. easy_install/setuptools के संस्करण को निर्धारित करना
- 29. किसी तालिका पर अधिकतम ऊंचाई सेट करना
- 30. पोस्टग्रेज़ पीजीक्रिप्ट क्षमता गायब है?
मैं 'pg_class' और' pg_attribute' टेबल पर डॉक्स देखा था, लेकिन मुझे नहीं पता था एक छिपे हुए 'pg_class' तालिका में' oid' नामित स्तंभ नहीं है। मैं यह नहीं समझ सका कि ओड दस्तावेज़ों से कहाँ था। धन्यवाद! –
यह काफी सटीक नहीं है। प्रत्येक डेटाबेस में 'pg_catalog' नामक स्कीमा होती है, जिसमें डेटाबेस के लिए विशिष्ट कैटलॉग टेबल होते हैं। –
मैं दूसरा @ टोनी विटाबिल। यह छुपा कॉलम 'ओआईडी' था जिसे मैं ढूंढ रहा था। –