एक टेबल नाम दिया गया है, मैं plpgsql फ़ंक्शन से प्राथमिक कुंजी कॉलम और उनके डेटाटाइप की सूची कैसे निकालूं?पोस्टग्रेस से plpgsql के माध्यम से मुझे तालिका की प्राथमिक कुंजी कैसे प्राप्त हो सकती है?
उत्तर
क्वेरी ऊपर बहुत बुरा है, क्योंकि यह वास्तव में धीमी है।
http://wiki.postgresql.org/wiki/Retrieve_primary_key_columns
यदि स्कीमा की जरूरत है प्रश्न के रूप में इस प्रकार है
SELECT
pg_attribute.attname,
format_type(pg_attribute.atttypid, pg_attribute.atttypmod)
FROM pg_index, pg_class, pg_attribute, pg_namespace
WHERE
pg_class.oid = 'foo'::regclass AND
indrelid = pg_class.oid AND
nspname = 'public' AND
pg_class.relnamespace = pg_namespace.oid AND
pg_attribute.attrelid = pg_class.oid AND
pg_attribute.attnum = any(pg_index.indkey)
AND indisprimary
pg_constraint
सिस्टम तालिका पर एक नज़र डालें। या information_schema.table_constraints
देखें कि क्या आप SQL मानक के करीब रहना पसंद करते हैं।
एक पूर्ण उदाहरण के लिए "-E" विकल्प के साथ psql
का उपयोग करके डीबी से कनेक्ट करें और \d <some_table>
टाइप करें - आपको तालिका का वर्णन करने में उपयोग की जाने वाली वास्तविक क्वेरी दिखाई देगी।
इसके अतिरिक्त, इसे pg_indexes से डेटा के साथ संयोजित करें, और आपको बहुत अच्छा होना चाहिए। वास्तव में एक प्राथमिक कुंजी केवल एक अनूठी अनुक्रमणिका है जो सभी क्षेत्रों में शून्य नहीं है। –
एसक्यूएल की एक सीधी बिट, आप के साथ प्राथमिक कुंजी स्तंभ तथा उनके प्रकार सूचीबद्ध कर सकते हैं प्रदान करने के लिए:
SELECT
c.column_name, c.data_type
FROM
information_schema.table_constraints tc
JOIN information_schema.constraint_column_usage AS ccu USING (constraint_schema, constraint_name)
JOIN information_schema.columns AS c ON c.table_schema = tc.constraint_schema AND tc.table_name = c.table_name AND ccu.column_name = c.column_name
where constraint_type = 'PRIMARY KEY' and tc.table_name = 'mytable';
जब मैं इसे अपने पोस्टग्रेस सर्वर पर चलाता हूं, तो मुझे एक खाली परिणाम सेट मिलता है। पूछने से पहले, मैंने सही तालिका नाम के साथ 'mytable'' को प्रतिस्थापित किया था। क्या मुझे काम करने के लिए एक विशिष्ट संदर्भ या दायरे में होना चाहिए? – 2mac
अनुक्रमित से सावधान रहें जहां स्तंभ क्रम तालिका की स्तंभ क्रम से भिन्न है:
मैं इस सरकारी संस्करण की सिफारिश करेंगे। (यानी यदि प्राथमिक कुंजी कॉलम 3, 2, और 1)
निम्न क्वेरी अधिक जटिल है, लेकिन उचित क्रम में कॉलम लौटाती है। ('Indisprimary' खंड निकालें एक मेज पर सभी अनुक्रमित के लिए एक ही जानकारी प्राप्त करने के)
WITH ndx_list AS
(
SELECT pg_index.indexrelid
FROM pg_index, pg_class
WHERE pg_class.relname = 'test_indices_table'
AND pg_class.oid = pg_index.indrelid
AND pg_index.indisprimary
), ndx_cols AS
(
SELECT pg_class.relname AS index_name, UNNEST(i.indkey) AS col_ndx, i.indisunique, i.indisprimary
FROM pg_class, pg_index i
WHERE pg_class.oid = i.indexrelid
AND pg_class.oid IN (SELECT indexrelid FROM ndx_list)
)
SELECT ndx_cols.index_name, ndx_cols.indisunique, ndx_cols.indisprimary,
a.attname, format_type(a.atttypid, a.atttypmod), a.attnum
FROM pg_class c, pg_attribute a
JOIN ndx_cols ON (a.attnum = ndx_cols.col_ndx)
WHERE c.oid = 'test_indices_table'::regclass
AND a.attrelid = c.oid
स्तंभ क्रम generate_subscripts
का उपयोग कर का संरक्षण:
SELECT
a.attname,
format_type(a.atttypid, a.atttypmod)
FROM
pg_attribute a
JOIN (SELECT *, GENERATE_SUBSCRIPTS(indkey, 1) AS indkey_subscript FROM pg_index) AS i
ON
i.indisprimary
AND i.indrelid = a.attrelid
AND a.attnum = i.indkey[i.indkey_subscript]
WHERE
a.attrelid = 'your_table'::regclass
ORDER BY
i.indkey_subscript
निम्नलिखित SQL
बयान मेरे लिए काम करता है:
SELECT a.attname
FROM pg_index i
JOIN pg_attribute a ON a.attrelid = i.indrelid
AND a.attnum = ANY(i.indkey)
WHERE i.indrelid = 'tablename'::regclass
AND i.indisprimary;
इसे सीधे here से लिया गया है।
- 1. तालिका की प्राथमिक कुंजी प्राप्त करें?
- 2. पोस्टग्रेस कोई प्राथमिक कुंजी ड्रॉबैक
- 3. रेल के पास है_मनी: के माध्यम से - क्या तालिका के माध्यम से स्थितियां हो सकती हैं?
- 4. क्या डेटाबेस विशेषता प्राथमिक और विदेशी कुंजी हो सकती है?
- 5. कैसेंड्रा CLI: CQL के माध्यम से की तरह प्राथमिक कुंजी
- 6. मुझे बाल तत्व की स्थिति कैसे प्राप्त हो सकती है
- 7. एसक्यूएल - कई-से-अनेक तालिका प्राथमिक कुंजी
- 8. मुझे लुआ में हैश टेबल में कुंजियों की संख्या कैसे प्राप्त हो सकती है?
- 9. रेल के पास है_मनी: के माध्यम से -> क्या मुझे प्राथमिक कुंजी कॉलम रखना चाहिए?
- 10. दूसरी यात्रा के बिना तालिका से प्राथमिक कुंजी कैसे प्राप्त करें?
- 11. मुझे मुख्य श्रेणी के लिए जावा क्लास निर्भरताओं की सूची कैसे प्राप्त हो सकती है?
- 12. रेल माइग्रेशन तालिका प्राथमिक कुंजी
- 13. rubyzip लाइब्रेरी का उपयोग करके मुझे ज़िप फ़ाइल की सामग्री कैसे प्राप्त हो सकती है?
- 14. एसक्यूएल प्राथमिक कुंजी '0' स्वीकार कर सकती है?
- 15. क्या हमारे पास एक विदेशी कुंजी हो सकती है जो किसी अन्य तालिका में प्राथमिक कुंजी नहीं है?
- 16. प्रोग्रामेटिक रूप से जेनरेट की गई प्राथमिक कुंजी
- 17. क्या SQL सर्वर दृश्यों में प्राथमिक और विदेशी कुंजी हो सकती है?
- 18. क्या मेरे पास एक ही तालिका में एकाधिक प्राथमिक कुंजी हो सकती हैं?
- 19. जावास्क्रिप्ट में यूनिक्स टाइमस्टैम्प से मुझे मानव पठनीय तिथि कैसे प्राप्त हो सकती है?
- 20. कोड के माध्यम से मुझे पाइथन मॉड्यूल का संस्करण संख्या कैसे प्राप्त हो सकता है?
- 21. plpgsql फ़ंक्शन तालिका (..)
- 22. 1000 से प्राथमिक कुंजी कैसे शुरू करें?
- 23. एक समग्र प्राथमिक कुंजी
- 24. किसी भी जेपीए इकाई की प्राथमिक कुंजी कैसे प्राप्त करें?
- 25. मुझे वाईएक्स में कम से कम दो वैकल्पिक घटकों की आवश्यकता कैसे हो सकती है?
- 26. कैसे एक प्राथमिक कुंजी
- 27. मुझे अपने कैलेंडर से दिनांक कैसे प्राप्त हो सकता है?
- 28. एकाधिक टेबल से चयन के माध्यम से ओरेकल सम्मिलित करें जहां एक तालिका में कोई पंक्ति नहीं हो सकती
- 29. प्राथमिक कुंजी
- 30. प्राथमिक कुंजी
मुझे यकीन है कि आपको pg_namespace से जुड़ने की आवश्यकता नहीं है। Pg_class का ओड अनूठा है, इसलिए जब आप इसे किसी रेगक्लास पर डाल देते हैं तो आप पहले ही स्कीमा नाम का अर्थ दे रहे हैं। यदि आपको स्कीमा नाम की आवश्यकता है तो इसे तालिका के नाम में शामिल करें: 'public.foo' :: regclass। –
"ऊपर दी गई क्वेरी बहुत खराब है क्योंकि यह वास्तव में धीमी है।" कृपया अन्य उत्तरों के पृष्ठ पर सापेक्ष स्थिति का जिक्र करने से बचें क्योंकि यह समय के साथ और चयनित सॉर्ट विधि द्वारा बदलता है। इसके बजाय किसी अन्य उत्तर का जिक्र करने का सबसे भविष्य-सबूत तरीका यह है कि इसे लिंक करना है। – faintsignal