मैं Postgresql में वर्तमान उपयोगकर्ता के स्वामित्व वाले सभी स्कीमाओं में सभी तालिकाओं को कैसे सूचीबद्ध करूं?


25

मैं सभी स्कीमाओं का उपयोग करके सभी तालिकाओं को सूचीबद्ध कर सकता हूं

> \dt *.*

लेकिन यह भी सिस्टम टेबल्स को सूचीबद्ध करता है जो मेरे टेबलों को बहुत अधिक संख्या में समेटते हैं जिनकी मुझे परवाह है। मुझे सार्वजनिक स्कीमा और मेरे द्वारा परिभाषित किसी भी स्कीमा में मेरे द्वारा बनाए गए सभी टेबल (और संभवतः विचार) पसंद होंगे।

मैं इसे खोज पथ पर स्कीमा को स्पष्ट रूप से जोड़ने के बिना ऐसा करने का एक तरीका खोजने की उम्मीद कर रहा हूं जैसा कि मैं उन्हें यहां वर्णित के रूप में बनाता हूं:

/programming//a/12902069

संपादित करें:

स्वीकृत उत्तर के आधार पर, मैंने निम्नलिखित दृश्य बनाया है:

create view my_tables as 
select table_catalog, table_schema, table_name, table_type 
from information_schema.tables 
where table_schema not in ('pg_catalog', 'information_schema');

और अब निम्नलिखित कमांड मुझे वह देता है जो मैं चाहता था:

select * from my_tables;

जवाबों:


32

यह उन सभी तालिकाओं को सूचीबद्ध करेगा जिनकी वर्तमान उपयोगकर्ता तक पहुंच है, न कि केवल वे जो वर्तमान उपयोगकर्ता के स्वामित्व में हैं:

select *
from information_schema.tables
where table_schema not in ('pg_catalog', 'information_schema')
and table_schema not like 'pg_toast%'

(मुझे पूरी तरह से यकीन नहीं है कि not like 'pg_toast%'वास्तव में इसकी आवश्यकता है।)

मुझे वास्तव में स्वामी की जानकारी की आवश्यकता है, आपको संभवतः pg_classतालिकाओं का उपयोग करने और संबंधित करने की आवश्यकता है ।

संपादित करें: यह क्वेरी है जिसमें स्वामी जानकारी शामिल है:

select nsp.nspname as object_schema,
       cls.relname as object_name, 
       rol.rolname as owner, 
       case cls.relkind
         when 'r' then 'TABLE'
         when 'm' then 'MATERIALIZED_VIEW'
         when 'i' then 'INDEX'
         when 'S' then 'SEQUENCE'
         when 'v' then 'VIEW'
         when 'c' then 'TYPE'
         else cls.relkind::text
       end as object_type
from pg_class cls
  join pg_roles rol on rol.oid = cls.relowner
  join pg_namespace nsp on nsp.oid = cls.relnamespace
where nsp.nspname not in ('information_schema', 'pg_catalog')
  and nsp.nspname not like 'pg_toast%'
  and rol.rolname = current_user  --- remove this if you want to see all objects
order by nsp.nspname, cls.relname;

यह काफी अच्छा है। मैं इससे my_tables नामक एक व्यू बनाने जा रहा हूं।
पीटर ग्रोव्स

महान उत्तर, when 'm' then 'MATERIALIZED_VIEW'उस नए प्रकार को दिखाने के लिए एक जोड़ें ।
Forbesmyester

हालांकि एक और जवाब संक्षिप्त है, यह नामस्थान को छोड़कर प्रासंगिक हो सकता है
एम एल टी


-3

यह देखो। सभी टेबल:

SELECT relname FROM pg_class WHERE relname !~ '^(pg_|sql_)' AND relkind = 'r';
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.