एक PostgreSQL स्कीमा में सूची तालिकाओं


329

जब मैं \dtpsql में करता हूं तो मुझे केवल वर्तमान स्कीमा ( publicडिफ़ॉल्ट रूप से) में तालिकाओं की एक सूची मिलती है ।

मैं सभी स्कीमा या किसी विशेष स्कीमा में सभी तालिकाओं की सूची कैसे प्राप्त कर सकता हूं?

जवाबों:


505

सभी स्कीमाओं में:

=> \dt *.*

एक विशेष स्कीमा में:

=> \dt public.*

कुछ प्रतिबंधों के साथ नियमित अभिव्यक्ति का उपयोग करना संभव है

\dt (public|s).(s|t)
       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 public | s    | table | cpn
 public | t    | table | cpn
 s      | t    | table | cpn

उन्नत उपयोगकर्ता नियमित अभिव्यक्ति अभिव्यक्ति का उपयोग कर सकते हैं जैसे चरित्र वर्ग, उदाहरण के लिए [0-9] किसी भी अंक से मेल खाने के लिए। सभी नियमित अभिव्यक्ति विशेष वर्ण धारा 9.7.3 में निर्दिष्ट किए गए अनुसार काम करते हैं, सिवाय .इसके कि ऊपर बताए अनुसार विभाजक के रूप में लिया जाता है, *जिसका अनुवाद नियमित-अभिव्यक्ति संकेतन .*में ?किया जाता है , जिसका अनुवाद किया जाता है ., और $जिसका शाब्दिक रूप से मिलान किया जाता है। आप लिख कर की जरूरत पर इन पैटर्न पात्रों का अनुकरण कर सकते हैं ?के लिए ., (R+|)के लिए R*, या (R|)के लिए R?$नियमित अभिव्यक्ति के रूप में एक नियमित अभिव्यक्ति के चरित्र की जरूरत नहीं है क्योंकि नियमित अभिव्यक्ति की सामान्य व्याख्या के विपरीत पूरे नाम से मेल खाना चाहिए (दूसरे शब्दों में,)$स्वचालित रूप से आपके पैटर्न से जुड़ा हुआ है)। *शुरुआत और / या अंत में लिखें यदि आप पैटर्न को लंगर डाले जाने की इच्छा नहीं रखते हैं। ध्यान दें कि दोहरे उद्धरण चिह्नों के भीतर, सभी नियमित अभिव्यक्ति विशेष वर्ण अपने विशेष अर्थ खो देते हैं और शाब्दिक रूप से मेल खाते हैं। इसके अलावा, नियमित अभिव्यक्ति विशेष वर्ण ऑपरेटर नाम पैटर्न (यानी, के तर्क \do) में शाब्दिक रूप से मेल खाते हैं ।


6
सीधे शब्दों में \dtकरने के लिए equivolent है \dt public.*मैं सही, कर रहा हूँ?
फ्रोजन फ्लेम

कैसे के बारे में कहते हैं, एक विशिष्ट स्कीमा में दो विशिष्ट तालिकाओं? पसंद है \dt public.user_info, public.user_scope?
जेम्स एम।

कोई बात नहीं, यह सिर्फ \dt public.a; \dt public.b;एक लाइन पर करना आसान है ।
जेम्स एम।

यह एक तरह का निहितार्थ है .. अगर \ dt केवल "सार्वजनिक" टेबल देता है, तो कोई भी नियमित अभिव्यक्तियों के माध्यम से कुछ और अधिक की उम्मीद नहीं करेगा ..
mehmet

1
@FrozenFlame यह नहीं है! डिफ़ॉल्ट रूप से यह दिखाता है कि आपके पास जो कुछ भी है search_path, और वह चूक करता है "$user", public.*। नतीजतन, set search_path=s; \dtस्कीमा में सभी तालिकाओं को सूचीबद्ध करने जा रहा है s
लुकास जुहरीच

257

आप से तालिकाओं का चयन कर सकते हैं information_schema

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

6
बहुत उपयोगी है अगर आपका इंटरफ़ेस शॉर्टकट का समर्थन नहीं करता है। धन्यवाद।
मैट बन्नर्ट

1
यह भी अच्छा है क्योंकि आप कुछ चुन सकते हैं जैसे table_schema, table_name से information_schema.tables जहाँ table_name जैसे '% जो कुछ भी%'; यदि आपको यह पता होना चाहिए कि तालिका किस स्कीमा में स्थित है। यह सुनिश्चित न करें कि आप \ dt
जोश ब्राउन

2
धन्यवाद, यह Amazon Redshift और \ dt (स्वीकृत उत्तर) पर काम करता है।
कार्लोस डब्ल्यूडब्ल्यू

2
यह सबसे आम तौर पर उपयोगी उत्तर है। INFORMATION_SCHEMA सबसे डेटाबेस का अनुपालन पर एसक्यूएल मानक में परिभाषित किया गया है, और उपलब्ध है
दावोस

54

वैकल्पिक रूप से information_schemaइसका उपयोग करना संभव है pg_tables:

select * from pg_tables where schemaname='public';

3
ध्यान दें कि तालिका नाम परिणामी क्वेरी यह है कि यदि आप केवल चाहते हैंSELECT tablename FROM pg_tables WHERE schemaname = 'public';
अनुदान हम्फ्रीज़

स्कीमा information_schemaसे आइटम सूचीबद्ध नहीं करने के साथ एक अनुमतियाँ समस्या मिली public, लेकिन pg_tablesविधि अच्छी तरह से काम किया। बहुत धन्यवाद!
जॉन क्रॉफोर्ड

8

भविष्य में इसके पार आने वालों के लिए:

यदि आप कई स्कीमाओं के लिए संबंधों की सूची देखना चाहते हैं:

$psql mydatabase
mydatabase=# SET search_path TO public, usa;   #schema examples
SET
mydatabase=# \dt
              List of relations
 Schema |      Name       | Type  |  Owner
--------+-----------------+-------+----------
 public | counties        | table | postgres
 public | spatial_ref_sys | table | postgres
 public | states          | table | postgres
 public | us_cities       | table | postgres
 usa    | census2010      | table | postgres
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.