PostgreSQL क्वेरी सभी तालिका नामों को सूचीबद्ध करने के लिए?


183

क्या मेरे Postgres DB में सभी तालिकाओं को सूचीबद्ध करने के लिए कोई क्वेरी उपलब्ध है।

मैंने एक क्वेरी की कोशिश की जैसे:

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

लेकिन यह क्वेरी विचारों को भी लौटाती है।

मैं केवल तालिका के नाम कैसे प्राप्त कर सकता हूं, विचार नहीं?

जवाबों:


307

इस क्वेरी ( मैनुअल से विवरण के आधार पर ) क्या डटकर ?

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

4
यह यहाँ सबसे अच्छा जवाब है।
टॉमी

3
टेबल प्रकार क्या है?
ब्रायन ब्रायस

सारणी से तालिका_ प्रकार: तालिका का प्रकार: एक स्थिर आधार तालिका (सामान्य तालिका प्रकार) के लिए आधार पर जाएं, एक दृश्य के लिए देखें, एक विदेशी तालिका के लिए आगे की ओर, या अस्थायी तालिका के लिए स्थानीय
मंदिर

37

यदि आप डेटाबेस की सूची चाहते हैं

SELECT datname FROM pg_database WHERE datistemplate = false;

यदि आप सभी डेटाबेस की वर्तमान पीजी स्थापना से तालिकाओं की सूची चाहते हैं

SELECT table_schema,table_name FROM information_schema.tables
ORDER BY table_schema,table_name;

कम से कम Postgres 9.5 में, यह सच नहीं है। मुझे एक क्लस्टर में 3 डेटाबेस मिले हैं, और यह केवल वर्तमान डेटाबेस से टेबल लौटा रहा है।
सूडो

दस्तावेज़ीकरण केवल वर्तमान एक कहता है: postgresql.org/docs/9.5/static/infoschema-tables.html "table_catalog sql_identifier उस डेटाबेस का नाम जिसमें तालिका (हमेशा वर्तमान डेटाबेस)"
sudo

27

आप जिस डेटाबेस को चाहेंगे, उसके साथ पोस्टग्रेज टर्मिनल खोलें:

psql dbname (run this line in a terminal)

उसके बाद, इस कमांड को पोस्टग्रेज के वातावरण में चलाएँ

\d

यह नाम से सभी तालिकाओं का वर्णन करेगा। मूल रूप से आरोही नाम से तालिकाओं की एक सूची।

तब आप फ़ील्ड द्वारा तालिका का वर्णन करने के लिए यह कोशिश कर सकते हैं:

\d tablename.

उम्मीद है की यह मदद करेगा।


@wingedpanther कैसे करें? कोई भी सूचकांक, कोई seq, ... के साथ केवल सभी तालिकाओं \dको सूचीबद्ध करने का एक विकल्प है ...?
पीटर क्रूस

5
क्या \dtइसके लिए नहीं है?
थोरोक

11

इसे इस्तेमाल करे:

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

यह एक काम करता है!


मुझे नहीं लगता कि हमें जरूरत है table_type='BASE TABLE'। शायद मैं गलत हूं, क्या आप कृपया विस्तार से बता सकते हैं?
abriggs

कभी-कभी उपयोगी फ़िल्टरिंग करंट कनेक्टेड DB जोड़ा जाता है: और table_catalog = current_database ()
Diego Scaravaggi

8
select 
 relname as table 
from 
 pg_stat_user_tables 
where schemaname = 'public'
  • यदि Track_activities अक्षम है तो यह काम नहीं करेगा

select 
  tablename as table 
from 
  pg_tables  
where schemaname = 'public'

1
pg_stat_user_tablestrack_activitiesअक्षम होने पर आबाद नहीं किया जा सकता है। जैसे "आधिकारिक" एपीआई का उपयोग कर pg_tablesया information_schema.tableएक है ज्यादा बेहतर विकल्प।
a_horse_with_no_name


0
SELECT table_name
FROM information_schema.tables
WHERE table_type='BASE TABLE'
AND table_schema='public';

MySQL के लिए आपको table_schema = 'dbName' की आवश्यकता होगी और MSSQL के लिए उस शर्त को हटा दें।

ध्यान दें कि "केवल उन तालिकाओं और विचारों को दिखाया गया है जो वर्तमान उपयोगकर्ता की पहुंच है"। इसके अलावा, यदि आपके पास कई डेटाबेस तक पहुँच है और परिणाम को एक निश्चित डेटाबेस तक सीमित करना चाहते हैं, तो आप शर्त और table_catalog = 'yourDatabase' (PostgreSQL में) जोड़कर प्राप्त कर सकते हैं।

यदि आप पंक्ति नाम और पाद लेख दिखाने वाले पंक्ति संख्या दिखाने वाले शीर्षलेख से छुटकारा पाना चाहते हैं, तो आप कमांड लाइन विकल्प -t (केवल -tuples-only) के साथ psql शुरू कर सकते हैं या आप psql में सेटिंग को चालू कर सकते हैं कमांड लाइन by \ t (\ pset tuples_only के लिए छोटा)। यह उदाहरण के लिए उपयोगी हो सकता है जब आउटपुट को किसी अन्य कमांड से \ g [कमांड |

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