2010-09-07 21 views
27

का उपयोग कर कस्टम प्रकारों को कैसे सूचीबद्ध करें I info_schema का उपयोग करके \ dT के बराबर एसक्यूएल खोजने की कोशिश कर रहा हूं और कुछ भी नहीं ढूंढ रहा है। क्या ऐसी किसी वस्तु का अस्तित्व है?पोस्टग्रेस info_schema

उदाहरण: यदि मैं निम्नलिखित कस्टम प्रकार enum जोड़ता हूं, तो मैं इसे info_schema में कैसे देख सकता हूं?

CREATE TYPE communication.channels AS ENUM 
    ('text_message', 
    'email', 
    'phone_call', 
    'broadcast'); 

नोट: मैं सही \ dT द्वारा प्रयोग किया जाता एसक्यूएल है (लॉगिंग बदल कर लिया गया है), लेकिन मैं INFORMATION_SCHEMA

+0

आप कमांडलाइन का उपयोग नहीं करना चाहते हैं, pgAdmin कि – DrColossos

+0

एक सुपर "क्लीन" रास्ते में क्वेरी रैप करने के लिए है क्या कर सकते हैं एक दृश्य। क्वेरी को भी बचाता है ताकि आपको हर बार इसे गुगल रखने की आवश्यकता न हो, हे http://albertech.blogspot.com/2016/12/show-all-custom-defined-types-in.html – jar

उत्तर

8

Enums SQL मानक में नहीं हैं और इसलिए सूचना स्कीमा में प्रतिनिधित्व नहीं किया गया है। अन्य उपयोगकर्ता परिभाषित प्रकार आमतौर पर user_defined_types दृश्य में होंगे, लेकिन यह लागू नहीं किया गया है। तो फिलहाल, आप PostgreSQL में उपयोगकर्ता द्वारा परिभाषित प्रकारों को सूचीबद्ध करने के लिए सूचना स्कीमा का उपयोग नहीं कर सकते हैं।

0

एक नज़र यहाँ है का उपयोग करते हुए एक क्लीनर लागू करने के लिए विशेष रूप से देख रहा हूँ: http://www.postgresql.org/docs/current/static/catalog-pg-enum.html

pg_enum सूची डेटा आप सामने

+0

दुर्भाग्य से pg_enum कैटलॉग केवल enum लेबल शामिल है, न कि स्कीमा या कुछ और। इसलिए आपको सार्थक डेटा प्राप्त करने के लिए किसी भी तरह से शामिल होना है –

35

संदर्भ के लिए देख रहे हैं होना चाहिए, यहाँ \ dT से एसक्यूएल है (pgAdmin एक या समान उपयोग करता है)

+०१२३५१६४१०
SELECT  n.nspname as schema, t.typname as type 
FROM  pg_type t 
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace 
WHERE  (t.typrelid = 0 OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)) 
AND  NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el WHERE el.oid = t.typelem AND el.typarray = t.oid) 
AND  n.nspname NOT IN ('pg_catalog', 'information_schema') 
+0

यह कोड उपयोगकर्ता द्वारा परिभाषित enums समेत सभी प्रकार की सूची प्रदर्शित करता है, लेकिन यह बताता है कि उन्हें कैसे परिभाषित किया गया है। –

9

यह वर्तमान डेटाबेस में सभी enum परिभाषित प्रकारों को सूचीबद्ध करने का एक आसान तरीका है।

SELECT pg_type.typname AS enumtype, 
    pg_enum.enumlabel AS enumlabel 
FROM pg_type 
JOIN pg_enum 
    ON pg_enum.enumtypid = pg_type.oid; 
+1

'एएस enumlabel' हिस्सा अनावश्यक है, आपको नहीं लगता? – Pere

2

मैं अपने enum नाम दिखाने के लिए एक दृश्य का उपयोग: क्वेरी परिणाम दो कॉलम, पहला शो नाम हर enum प्रकार के, दूसरे शो में प्रत्येक enum प्रकार के लिए हर मान का नाम देता है। उस दृश्य से डेटा को एक एनम फ़ील्ड के लिए उपलब्ध विकल्पों की एक सूची प्रदान करने के लिए किसी एप्लिकेशन में उपयोग किया जा सकता है।

CREATE OR REPLACE VIEW vw_enums AS 
SELECT t.typname, e.enumlabel, e.enumsortorder 
FROM pg_enum e 
JOIN pg_type t ON e.enumtypid = t.oid;
6

सभी की सूची आपका आत्म प्रकार से परिभाषित किया गया:

\dT 

testDB=> \dT 
       List of data types 
Schema |   Name   | Description 
--------+-------------------------+------------- 
public | myType     | 
(1 row) 
संबंधित मुद्दे