2010-12-02 6 views
6

मुझे PostgreSQL में कॉलम प्रकार जानने की आवश्यकता है (यानी varchar(20))। मुझे पता है कि मैं शायद इसे \d psql में कुछ उपयोग कर सकता हूं, लेकिन मुझे इसे एक चुनिंदा क्वेरी के साथ करने की आवश्यकता है।
क्या यह PostgreSQL में संभव है?PostgreSQL में किसी तालिका के स्कीमा विवरण पूछें?

उत्तर

6

आप पूरी तरह से निम्न क्वेरी के साथ postgres का उपयोग कर एक मेज वर्णन कर सकते हैं।

यह भी -E विकल्प

$ psql -E 

और फिर एक सरल \d mytable इच्छा उत्पादन postgres द्वारा प्रयोग किया जाता तालिका वर्णन करने के लिए प्रश्नों का उपयोग कर psql ग्राहक शुरू करने के लिए संभव है। यह प्रत्येक psql आदेशों का वर्णन करने के लिए काम करता है।

+0

उत्कृष्ट उत्तर! मैं एक और समस्या में भाग गया, हालांकि: http://stackoverflow.com/questions/4336465/using-query-to-set-the-column-type-in-postgresql – David

+2

मुझे नहीं लगता कि आपको उस रेगेक्स मैच की आवश्यकता है, ' c.relname ~ '^ (TABLENAME) $' '' c.relname = 'TABLENAME' के बराबर है। हालांकि अच्छा जवाब है। –

+0

@mu आप सही हैं, लेकिन मुझे लगता है कि उन्होंने इसे रेगेक्स समर्थन के साथ कुछ से कॉपी किया है :) –

2

हां, information_schema पर देखें। इस Tith

SELECT 
    a.attname as Column, 
    pg_catalog.format_type(a.atttypid, a.atttypmod) as Datatype 
    FROM 
    pg_catalog.pg_attribute a 
    WHERE 
    a.attnum > 0 
    AND NOT a.attisdropped 
    AND a.attrelid = (
    SELECT c.oid 
    FROM pg_catalog.pg_class c 
    LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace 
    WHERE c.relname ~ '^(TABLENAME)$' 
    AND pg_catalog.pg_table_is_visible(c.oid) 
) 

आप स्तंभ नाम और डेटा प्रकार पुनः प्राप्त करेगा:

10

एक एक कॉलम के प्रकार प्राप्त करने के लिए PostgreSQL में बहुत आसान तरीका है।

SELECT pg_typeof(col)::text FROM tbl LIMIT 1 

तालिका में कम से कम एक पंक्ति होनी चाहिए। और आप केवल प्रकार के संशोधक के बिना बेस प्रकार प्राप्त करते हैं (यदि कोई हो)। अगर आपको इसकी आवश्यकता भी है तो नीचे दिए गए विकल्प का प्रयोग करें।
आप स्थिरांक के लिए भी फ़ंक्शन का उपयोग कर सकते हैं। manual on pg_typeof()

एक खाली (या किसी भी) तालिका आप सिस्टम सूची pg_attribute क्वेरी का उपयोग कर सकते पूर्ण क्रम में स्तंभों की सूची और उनके संबंधित प्रकार प्राप्त करने के लिए के लिए: format_type() पर

SELECT attnum, attname AS column, format_type(atttypid, atttypmod) AS type 
FROM pg_attribute 
WHERE attrelid = 'myschema.mytbl'::regclass -- optionally schema-qualified 
AND NOT attisdropped 
AND attnum > 0 
ORDER BY attnum; 

मैनुअल और object identifier typesregclass की तरह पर ।

+0

थोड़ी देर के लिए "format_type (atttypid, atttypmod)" की तलाश में है, क्योंकि ऐसा लगता है कि यह info_schema.columns जैसा ही है। udt_name (या इसी तरह और यह मेरे मामले के लिए बिल्कुल ठीक है)। धन्यवाद :)। – Dolfa

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