Postgresql info_schema में सभी तालिकाओं को सूचीबद्ध करें


202

PostgreSQL के information_schema के सभी तालिकाओं को सूचीबद्ध करने का सबसे अच्छा तरीका क्या है?

स्पष्ट करने के लिए: मैं एक खाली डीबी के साथ काम कर रहा हूं (मैंने अपनी खुद की कोई तालिका नहीं जोड़ी है), लेकिन मैं सूचना तालिका में प्रत्येक तालिका देखना चाहता हूं।

जवाबों:


277

आपको select * from information_schema.tablesकिसी विशेष डेटाबेस के लिए Postgres द्वारा प्रबंधित की जा रही प्रत्येक तालिका की सूची प्राप्त करने के लिए बस चलाने में सक्षम होना चाहिए ।

आप where table_schema = 'information_schema'सूचना स्कीमा में सिर्फ सारणी देखने के लिए एक जोड़ सकते हैं ।


4
धन्यवाद, मैंने अभी कोशिश की: / dt (तारांकन)। (तारांकन) क्या यह कोई भिन्न है?
छोटका

मुझे / dt (तारांकन) के बारे में कुछ भी पता नहीं है। (तारांकन) चीज़, क्षमा करें। मैंने सिर्फ पोस्टग्रेज में चुनिंदा क्वेरी को चलाया और इसमें सभी तालिकाओं के बारे में जानकारी सूचीबद्ध की। चयनित स्टेटमेंट (अपने रिक्त db पर) को चलाने का प्रयास करें और देखें कि यह क्या रिटर्न करता है।
रोडोक्लब

उपरोक्त कमांड को आज़माकर सूचना_schema में निम्न तालिकाओं को सूचीबद्ध करता है: sql_features, sql_implementation_info, sql_languages, sql_packages, sql_parts, sql_sizing, sql_sizing_profiles ..... तो उन तालिकाओं और सूचना_schema.tables में क्या अंतर है?
छोटू

2
आपके द्वारा सूचीबद्ध सभी टेबल (/ dt कमांड के माध्यम से) डेटाबेस के बारे में मेटा-जानकारी प्रदान करते हैं। सूचीबद्ध तालिकाओं में से प्रत्येक अलग-अलग जानकारी दिखाता है। इसलिए, उदाहरण के लिए, info_schema.tables तालिका डेटाबेस में सभी तालिकाओं और उनकी विशेषताओं को सूचीबद्ध करती है (जैसे कि यह देखने में सक्षम है कि क्या यह एक तालिका है या एक दृश्य है, नाम क्या है और उस जैसी अन्य जानकारी)। Information_schema.sql_features तालिका दिखाएगा कि डेटाबेस पर कौन सी सुविधाएँ सक्षम हैं (इसलिए मैं देख सकता हूं कि मैंने अपने डेटाबेस पर एंबेडेड सी का समर्थन किया है, साथ ही प्रत्यक्ष एसक्यूएल भी)।
अस्तबल

1
आप डीटी कमांड द्वारा सूचीबद्ध तालिकाओं में से प्रत्येक पर एक चयन * चला सकते हैं - इसने आपको डेटाबेस पर मेटा-डेटा युक्त तालिकाओं की एक सूची दिखाई है।
रोडोक्लब

113

अपनी तालिकाओं के उपयोग की सूची के लिए:

SELECT table_name FROM information_schema.tables WHERE table_schema='public'

यह केवल आपके द्वारा बनाई गई तालिकाओं को सूचीबद्ध करेगा।


उन तालिकाओं के बारे में जो आप नहीं बनाते हैं, लेकिन आपके पास पहुंच की अनुमति है?
Huy

4
यह केवल सार्वजनिक स्कीमा में टेबल दिखाएगा। आप अन्य स्कीमा में टेबल बना सकते हैं।
जो वान डायक

इसके अलावा यह तालिकाओं और विचारों के बीच अंतर नहीं करेगा।
जेरजो

44
\dt information_schema.

psql के भीतर से, ठीक होना चाहिए।


14

"\ Z" COMMAND भी सूची टेबल जब इंटरैक्टिव psql सत्र के अंदर करने के लिए एक अच्छा तरीका है।

जैसे।

# psql -d mcdb -U admin -p 5555
mcdb=# /z
                           Access privileges for database "mcdb"
 Schema |              Name              |   Type   |           Access privileges
--------+--------------------------------+----------+---------------------------------------
 public | activities                     | table    |
 public | activities_id_seq              | sequence |
 public | activities_users_mapping       | table    |
[..]
 public | v_schedules_2                  | view     | {admin=arwdxt/admin,viewuser=r/admin}
 public | v_systems                      | view     |
 public | vapp_backups                   | table    |
 public | vm_client                      | table    |
 public | vm_datastore                   | table    |
 public | vmentity_hle_map               | table    |
(148 rows)

1
यह सार्वजनिक के अलावा अन्य स्कीमाओं की सूची नहीं देता है ।
केनी एविट

10

आप भी उपयोग कर सकते हैं

select * from pg_tables where schemaname = 'information_schema'

जेनरल पीजी में * टेबल आपको सब कुछ डीबी में देखने की अनुमति देते हैं, आपकी अनुमति के लिए विवश नहीं (यदि आपके पास पाठ्यक्रम की तालिकाओं तक पहुंच है)।


9

'xxx'Postgresql में निजी स्कीमा के लिए :

SELECT table_name FROM information_schema.tables 
 WHERE table_schema = 'xxx' AND table_type = 'BASE TABLE'

बिना table_type = 'BASE TABLE', आप तालिकाओं और विचारों को सूचीबद्ध करेंगे


8

सूचना के आधार पर तालिकाओं और विचारों को भूल जाएं। सूचनाओं को शामिल करें।

select * from information_schema.tables

5. भूलना और विचार कुछ स्कीमा के होते हैं

select * from information_schema.tables
    where table_schema not in ('information_schema', 'pg_catalog')

केवल (लगभग \ dt) भूल जाओ

select * from information_schema.tables
    where table_schema not in ('information_schema', 'pg_catalog') and
    table_type = 'BASE TABLE'

यदि आप table_type द्वारा फ़िल्टर नहीं करते हैं, तो आपको सभी प्रकार की वस्तुएँ मिलेंगी, जैसे कि तालिकाओं और दृश्यों को मिलाया जाना।
रसेलहॉफ

वास्तव where table_schema not in ('information_schema', 'pg_catalog')में इसके लिए क्या है ?
जयरजो

1

यदि आप एक त्वरित और गंदा वन-लाइनर क्वेरी चाहते हैं:

select * from information_schema.tables

आप इसे psql को खोले बिना सीधे क्वेरी टूल में चला सकते हैं।

(अन्य पोस्ट में अच्छी और अधिक विशिष्ट सूचनाओं के बारे में जानकारी दी गई है। लेकिन एक नए रूप में, मुझे यह पता चल रहा है कि यह एक-लाइनर क्वेरी मुझे तालिका के साथ पकड़ पाने में मदद करती है)

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