मैं किसी निर्दिष्ट तालिका के लिए सभी स्तंभों को कैसे सूचीबद्ध करूं


158

मैं एक डेटाबेस में जानकारी का एक सटीक टुकड़ा ढूंढ रहा हूं जिसके बारे में मुझे कोई जानकारी नहीं है।

यह एक 3 पार्टी उत्पाद है, वे कुछ सवालों के जवाब देने में धीमे हैं, और मुझे पता है कि डेटा उस db के अंदर पड़ा हुआ है, इसलिए मैं थोड़ा रेट्रो इंजीनियरिंग करना चाहता हूं।

एक तालिका दी गई, क्या इस तालिका के लिए स्तंभों के नामों की सूची होना संभव है?

SqlServer में उदाहरण के लिए, एक तालिका को पुन: प्रयोज्य CREATE विवरणों में डंप करना संभव है, यह पाठ उन सभी स्तंभों को सूचीबद्ध करता है जिनसे तालिका बना है।

  0

आपकी डीबी तक किस तरह की पहुंच है? 13 aug. 122012-08-13 12:49:57

  0

@ शेडो, यह एक अलग मशीन पर है, लेकिन मैं इसमें प्रवेश कर सकता हूं, और व्यवस्थापक अधिकारों के साथ psql कमांड लाइन लॉन्च कर सकता हूं। 13 aug. 122012-08-13 12:54:37

+4

अगर मैं आपको सही तरीके से समझूं, तो आप 'psql' में' \ dt [+] table_name' के बाद हैं। 13 aug. 122012-08-13 13:03:09

+1

नहीं।\ dt + को स्तंभ नाम को स्पष्ट रूप से प्रदर्शित करने के लिए प्रतीत नहीं होता है।यह केवल "विवरण" फ़ील्ड जोड़ता है। 13 aug. 122012-08-13 13:16:51

+7

लेकिन \ d + तालिका का नाम काम करता है! 13 aug. 122012-08-13 13:18:12

197

कमांड लाइन के अलावा \d+ आप पहले से ही पाया, आप भी इस्तेमाल कर सकते हैं Information Schema स्तंभ डेटा को देखने के लिए, का उपयोग कर information_schema.columns :

SELECT *
FROM information_schema.columns
WHERE table_schema = 'your_schema'
    AND table_name  = 'your_table'

नोट: ऊपर दिए गए उदाहरण के अनुसार, सुनिश्चित करें कि मान उद्धरणों में संलग्न हैं।

  0

Psql में, क्वेरी परिणामों को रैखिक (सारणी के बजाय) और इस प्रकार https://stackoverflow.com/a/9605093/513397 को पढ़ने में आसान बनाने के लिए '\ x on' या' \ pset का उपयोग' पर विस्तार करें। 07 sep. 172017-09-07 22:46:06

+1

वर्तमान संस्करणों में (इसे 9.6 में आज़माया गया) आप psql '\ d + public में कर सकते हैं।' '' public' स्कीमा में अपने सभी तालिकाओं और विचारों का विवरण (स्कीमा + इंडोल/fkeys/ट्रिगर) प्राप्त करने के लिए।हम अपनी प्री-कमिट हुक लिपि में इसका उपयोग प्रत्येक कमेटी द्वारा किए गए डीबी में बदलावों पर नज़र रखने के लिए करते हैं। 23 oct. 172017-10-23 18:30:47

+1

केवल कॉलम नाम प्राप्त करने के लिए column_name चुनें 22 feb. 182018-02-22 16:56:14


54

information schemaधीमा और सुनिश्चित तरीका है: यह मानकीकृत है और बड़े पैमाने पर अन्य डेटाबेस के लिए पोर्टेबल है जो इसका समर्थन करते हैं।और यह प्रमुख संस्करणों में काम करता रहेगा।

हालाँकि,विचारोंसूचना स्कीमा में अक्सर कई तालिकाओं में शामिल होते हैंsystem catalogsएक कड़ाई से मानकीकृत प्रारूप को पूरा करने के लिए - जिनमें से अधिकांश समय केवल मृत माल हैं।यह उन्हें बनाता हैधीमा
पोस्टग्रैज डेवलपर्स वादे नहीं कर रहे हैं, लेकिन मूल बातें (जैसे यहां क्या जरूरी है) प्रमुख संस्करणों में बदलने नहीं जा रहे हैं।

psql(देशी कमांड-लाइन इंटरफ़ेस), निश्चित रूप से फास्ट लेन को ले जाता है, और स्रोत से सीधे पूछताछ करता है।यदि आप शुरू करते हैंpsql with the parameter -E, SQL पीछे backslash जैसे आदेश\dप्रदर्शित किया गया है।या\set ECHO_HIDDEN onpsql कमांड लाइन से।वहां से शुरू करके आप अपने प्रश्न का उत्तर बना सकते हैं।

एक तालिका दी गई, क्या इस तालिका के लिए स्तंभों के नामों की सूची होना संभव है।

SELECT attrelid::regclass AS tbl
      , attname      AS col
      , atttypid::regtype AS datatype
       -- more attributes?
FROM  pg_attribute
WHERE attrelid = 'myschema.mytable'::regclass -- table name, optionally schema-qualified
AND  attnum > 0
AND  NOT attisdropped
ORDER BY attnum;

की तुलना में तेजquerying information_schema.columns।प्रयत्नEXPLAIN ANALYZEअपने लिए देखनाफिर भी मुश्किल से एक बार के लुक-अप के लिए मायने रखता है।लेकिन कई बार दोहराए जाने वाले क्वेरी/फ़ंक्शन में उपयोग किए जाने पर फर्क पड़ सकता है।

दृश्यता में भी सूक्ष्म अंतर हैं।विस्तृत तुलना:

+1

वास्तव में ऐसा है कि आप आपको '-ई' दिखाते हैं और लोगों को दिखाते हैं कि psql का वर्ग कैसे प्राप्त करें। 02 dec. 162016-12-02 20:31:40


52

अन्य उत्तरों के पूरक के रूप में, यहां तक ​​कि कोई भी चयन कथन जो कोई पंक्तियां नहीं लौटाता है, कॉलम नामों को आपके और एप्लिकेशन कोड में उजागर करेगा।

select *
from table_name
where false;

अनुमतियाँ इनमें से किसी भी दृष्टिकोण के साथ खेल में आ सकती हैं।

  0

जल्द और आसान।सबसे अच्छा जवाब अगर मुझे सिर्फ कॉलम की एक सूची देखने की आवश्यकता है। 26 jan. 172017-01-26 18:23:54

  0

मुझे लगता है कि आप इस एसक्यूएल को psql कमांड को पास करना चाहते हैं।मैं सुझाव देता हूं कि आउटपुट में आश्चर्य से बचने के लिए उस मामले में -no-psqlrc विकल्प का उपयोग करें। 09 mar. 172017-03-09 19:37:28

  0

सबसे अच्छा, त्वरित और आसान 04 dec. 172017-12-04 10:31:13

  0

ये जीनियस है !! 01 feb. 182018-02-01 10:07:26