PostgreSQL में SQL में सभी विचारों को कैसे सूचीबद्ध करें?


40

मैं PostgreSQL में SQL कमांड का उपयोग करके डेटाबेस के लिए सभी विचारों को कैसे सूचीबद्ध करूं?

मैं psql \dvकमांड के आउटपुट के समान कुछ चाहूंगा , लेकिन अधिमानतः देखने के नामों की एक सूची। जैसे,

SELECT ...;
my_view_1
my_view_2
my_view_3

मैं Ubuntu Linux पर PostgreSQL v9.1.4 चला रहा हूँ।


क्या आप एक उत्तर चुन सकते हैं?
इवान कैरोल

जवाबों:


42

से प्रलेखन :

 select table_name from INFORMATION_SCHEMA.views;

यदि आप नहीं चाहते कि सिस्टम दृश्य आपका परिणाम है, तो यह प्रयास करें:

 select table_name from INFORMATION_SCHEMA.views WHERE table_schema = ANY (current_schemas(false))

धन्यवाद @ पायल हालाँकि, वह आदेश 128 पंक्तियों को लौटाता है, जबकि \ DV 57 पंक्तियाँ देता है। यह मुझे "टेबल", "कॉलम", "डोमेन", "pg_role" जैसे सिस्टम व्यू दे रहा है, आदि मुझे केवल मेरे द्वारा देखे गए विचार कैसे मिलते हैं?
Rob Bednark

यह आपको उन लोगों की सूची देता है, जिनके पास आपकी पहुंच है। किसी दिए गए स्कीमा के where table_schema='USERNAME'लिए, क्वेरी में शामिल हों
Phil for

@ एफिल यह तभी काम करता है जब उपयोगकर्ता के लिए एक स्कीमा नाम से पहचाना जाता है। डिफ़ॉल्ट रूप से यह मामला नहीं है, हालांकि, publicस्कीमा है।
dezso

1
INFORMATION_SCHEMA.views सिर्फ उन विचारों को दिखाता है जो वर्तमान उपयोगकर्ता के पास सही हैं। यदि डेटाबेस में ऐसे विचार हैं कि वर्तमान उपयोगकर्ता के पास अधिकार नहीं है, तो उन विचारों का नाम परिणाम में नहीं दिखाई देगा। @ फिल के लिंक में दस्तावेज़ से: केवल उन विचारों को दिखाया गया है जो वर्तमान उपयोगकर्ता की पहुंच है (स्वामी होने के नाते या कुछ विशेषाधिकार होने के कारण)।
काओ मिन्ह तू

21

आप pg_catalog.pg_viewsअपनी इच्छित जानकारी के लिए क्वेरी कर सकते हैं:

select viewname from pg_catalog.pg_views;

स्कीमा नाम प्राप्त करने के लिए परिष्कृत क्वेरी भी - यदि आपके पास अलग-अलग स्कीमा में एक ही नाम के साथ कई विचार हैं - और इस प्रणाली को छोड़ दिया है:

select schemaname, viewname from pg_catalog.pg_views
where schemaname NOT IN ('pg_catalog', 'information_schema')
order by schemaname, viewname;

IMHO, इस तरह से फिल के जवाब में मेरी टिप्पणी में बताए गए कारणों के लिए INFORMATION_SCHEMA.views क्वेरी से बेहतर है ।


4

यदि आपको केवल अंतःक्रियात्मक रूप से इसकी आवश्यकता है psql, तो आप \dvविचारों को दिखाने के \dmलिए , या भौतिक विचारों के लिए भी उपयोग कर सकते हैं । या उदाहरण के लिए उपयोग करें +, जैसे \dm+कुछ अतिरिक्त जानकारी दिखाने के लिए (ज्यादातर भौतिक दृष्टि से देखने के लिए उपयोगी)।


1
\dv *.*और \dm *.* सभी स्कीमाओं की जानकारी के लिए!
पाक

3

प्रयत्न:

SELECT  n.nspname AS table_schema,
        pg_catalog.pg_get_userbyid(c.relowner) AS table_owner,
        c.relname AS table_name
    FROM pg_catalog.pg_class c
         LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace)
    WHERE c.relkind  = 'v'
;

यदि आप अधिक विवरण चाहते हैं, तो आप अपनी आवश्यकताओं के अनुसार निम्नलिखित को संशोधित कर सकते हैं:

SELECT  n.nspname AS table_schema,
        pg_catalog.pg_get_userbyid(c.relowner) AS table_owner,
        c.relname AS table_name,
        s.n_live_tup AS row_count,
        count (a.attname) AS column_count,
        pg_catalog.obj_description(c.oid, 'pg_class') AS comments,
        CASE c.relkind
            WHEN 'v'
            THEN pg_catalog.pg_get_viewdef(c.oid, true)
            ELSE null
            END AS query
    FROM pg_catalog.pg_class c
         LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace)
         LEFT JOIN pg_catalog.pg_attribute a ON (c.oid = a.attrelid AND a.attnum > 0 AND NOT a.attisdropped)
         LEFT JOIN pg_catalog.pg_stat_all_tables s ON (c.oid = s.relid)
    WHERE c.relkind  = 'v'
GROUP BY n.nspname,
        c.relowner,
        c.relkind,
        c.relname,
        s.n_live_tup,
        c.oid
ORDER BY n.nspname,
        c.relname
;

2

मैंने viewएक सूची बनाने के लिए एक सूची बनाई views:

create or replace view show_views as 
select table_name from INFORMATION_SCHEMA.views 
WHERE table_schema = ANY (current_schemas(false));

और जब मैं डेटाबेस में लिखे गए सभी विचारों को देखना चाहता हूं:

select * from show_views;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.