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


1171

मैं PostgreSQL प्रशासन सीखने की कोशिश कर रहा हूं और psqlकमांड लाइन टूल का उपयोग करना सीखना शुरू कर दिया है ।

जब मैं प्रवेश psql --username=postgresकरता हूं, तो मैं सभी डेटाबेस और तालिकाओं को कैसे सूचीबद्ध करूं?

मैंने कोशिश की है \d, dऔर dS+कुछ भी सूचीबद्ध नहीं है। मैंने pgAdmin III के साथ दो डेटाबेस और कुछ तालिकाओं का निर्माण किया है, इसलिए मुझे पता है कि उन्हें सूचीबद्ध किया जाना चाहिए।


1
यदि आप इसे कमांड लाइन के माध्यम से एक्सेस करना चाहते हैं, तो चलाएंpsql -l
एड्रियन

यह टिप्पणी निश्चित रूप से शीर्ष उत्तरों में से एक होनी चाहिए! यदि आप को जरूरत है तो आप भी कर सकते हैं psql --username=postgres -l
उलेसे बीएन

जवाबों:


1543

कृपया निम्नलिखित आदेशों पर ध्यान दें:

  • \listया \l: सभी डेटाबेस को सूचीबद्ध करें
  • \dt: वर्तमान डेटाबेस में सभी तालिकाओं को सूचीबद्ध करें

आप अन्य डेटाबेस में टेबल कभी नहीं देखेंगे, ये टेबल दिखाई नहीं दे रहे हैं। आपको इसकी तालिकाओं (और अन्य वस्तुओं) को देखने के लिए सही डेटाबेस से कनेक्ट करना होगा।

डेटाबेस स्विच करने के लिए:

\connect database_name या \c database_name

Psql के बारे में मैनुअल देखें ।


131
आप \c db_nameएक निश्चित डेटाबेस से कनेक्ट करने के लिए उपयोग कर सकते हैं ।
eikes

17
\dtवर्तमान डेटाबेस में सभी तालिकाओं को सूचीबद्ध करने के लिए प्रकट नहीं होता है (यह search_pathकम से कम 9.2 पर पाए जाने वाले लोगों को बाहर करने के लिए लगता है )
जैक डगलस

22
\dt *.आपके खोज पथ को संशोधित किए बिना, सभी स्कीमाओं में सभी तालिकाओं को सूचीबद्ध करेगा।
danpelota

19
\ l + मेरा पसंदीदा है - यह डिस्क उपयोग को भी दर्शाता है।
लेस्टर चेउंग

1
विंडोज पर मैं इस कमांड के साथ डेटाबेस को सूचीबद्ध कर सकता हूं psql -U username -lलेकिन यह स्लैश संस्करण के साथ काम नहीं करता है।
NoNameProvided 10

350

यह सूची डेटाबेस:

SELECT datname FROM pg_database
WHERE datistemplate = false;

यह वर्तमान डेटाबेस में तालिकाओं को सूचीबद्ध करता है

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

11
आप सही कह रहे हैं, लेकिन सवाल psql-tool के मेटा-कमांड्स के बारे में था। \ dt किसी भी क्वेरी को टाइप करने की तुलना में बहुत आसान है।
फ्रैंक हाइकेंस

19
मुझे लगता है कि यह एक महान जवाब है क्योंकि यह एक लिनक्स कमांड लाइन से निष्पादित किया जा सकता है, जो कि Psql दुभाषिया में होने की आवश्यकता के विपरीत है जो कभी-कभी मेरे लिए ExtraPutty का उपयोग करके लटका देता है।
प्यार और शांति - जो कोड्सवेल

2
मेरा दिन भी बचा। अपने विशेष मामले के लिए मैं जोड़ रहा हूं WHERE table_schema = 'public'क्योंकि मैं सिर्फ कस्टम टेबल छोड़ना चाहता हूं।
रेनो

29
यदि आप -E ध्वज के साथ psql शुरू करते हैं, तो जब आप मेटा-कमांड का उपयोग करते हैं तो यह वास्तविक क्वेरी प्रदर्शित करेगा।
डेबस्टर

यह एक अच्छा जवाब है। हालाँकि, ओपी मेटाकॉमंड्स चाहता था, मैं इसके लिए गोग्लिंग था, और इसने मुझे इस प्रश्न की ओर ले गया।
दूर खाते

109

Postgresql में ये टर्मिनल कमांड उपलब्ध डेटाबेस को सूचीबद्ध करते हैं

el@defiant$ /bin/psql -h localhost --username=pgadmin --list

या कमान ने और अधिक सरलता से कहा:

psql -U pgadmin -l

वे आदेश इसे टर्मिनल पर प्रिंट करते हैं:

                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 kurz_prod | pgadmin  | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 pgadmin   | pgadmin  | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(5 rows)

ये उपलब्ध डेटाबेस हैं।

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

उस डेटाबेस में तालिकाओं को सूचीबद्ध करने से पहले आपको एक डेटाबेस निर्दिष्ट करना होगा।

el@defiant$ psql -U pgadmin -d kurz_prod

यह आपको psql टर्मिनल में लाता है:

kurz_prod=#

\dसभी तालिकाओं, दृश्यों और अनुक्रमों को दिखाने वाले कमांड अर्थ का उपयोग करें

kurz_prod=# \d

यह प्रिंट:

           List of relations
Schema |  Name   |   Type   |  Owner
--------+---------+----------+---------
public | mytable | table    | pgadmin
public | testing | sequence | pgadmin
(2 rows)

फिर, pscl टर्मिनल से बाहर निकलने के लिए, टाइप करें \qऔर एंटर दबाएं। या Ctrl-Dएक ही काम करता है। ये उस डेटाबेस में टेबल हैं।


4
\ घ सिर्फ तालिकाओं की सूची नहीं है:\d[S+] list tables, views, and sequences
जैक डगलस

3
मेरे लिए, यह "सही" उत्तर है क्योंकि इसके लिए आपको पहले से ही किसी मौजूदा डेटाबेस से जुड़े होने की आवश्यकता नहीं है।
aardvarkk

71

\lके लिए भी आशुलिपि है \list। काफी कुछ स्लैश कमांड हैं, जिन्हें आप उपयोग करके psql में सूचीबद्ध कर सकते हैं \?


35

डेटाबेस और टेबल सूची के बारे में अधिक जानकारी प्राप्त करने के लिए, आप यह कर सकते हैं:

\l+ डेटाबेस को सूचीबद्ध करने के लिए

                                                                    List of databases
    Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   |  Size   | Tablespace |                Description
------------+----------+----------+-------------+-------------+-----------------------+---------+------------+--------------------------------------------
 pgbench    | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 29 MB   | pg_default |
 postgres   | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 6073 kB | pg_default | default administrative connection database
 slonmaster | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 1401 MB | movespace  |
 slonslave  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 32 MB   | pg_default |
 template0  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +| 5785 kB | pg_default | unmodifiable empty database
            |          |          |             |             | postgres=CTc/postgres |         |            |
 template1  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +| 5985 kB | pg_default | default template for new databases
            |          |          |             |             | postgres=CTc/postgres |         |            |
 test       | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 13 MB   | pg_default |
(7 rows)

तथा

\d+ वर्तमान डेटाबेस में सभी खोज में मौजूदा टेबल_पाठ स्कीमा सूचीबद्ध करने के लिए।

test=# \dn+ --list schemas
                          List of schemas
  Name  |  Owner   |  Access privileges   |      Description       
--------+----------+----------------------+------------------------
 public | postgres | postgres=UC/postgres+| standard public schema
        |          | =UC/postgres         | 
schema1 | postgres | postgres=UC/postgres+| 
        |          | =UC/postgres         | 
(2 row)

test=# set search_path to schema1, public;
SET
test=# \d+
                                  List of relations
     Schema  |      Name       | Type  |    Owner     |    Size    | Description
    ---------+-----------------+-------+--------------+------------+-------------
     public  | all_units       | table | postgres     | 0 bytes    |
     public  | asset           | table | postgres     | 16 kB      |
     public  | asset_attribute | table | postgres     | 8192 bytes |
     public  | food            | table | postgres     | 48 kB      |
     public  | name_log        | table | postgres     | 8192 bytes |
     public  | outable         | table | ordinaryuser | 0 bytes    |
     public  | outable2        | table | ordinaryuser | 0 bytes    |
     public  | test            | table | postgres     | 16 kB      |
     public  | usr             | table | postgres     | 5008 kB    |
     schema1 | t1              | table | postgres     | 0 bytes    |
    (10 rows)

33

Pg_Admin से आप बस अपने वर्तमान डेटाबेस पर निम्नलिखित चला सकते हैं और इसे निर्दिष्ट स्कीमा के लिए सभी तालिकाएँ मिलेंगी:

SELECT * 
FROM information_schema.tables 
WHERE table_type = 'BASE TABLE' 
    AND table_schema = 'public' 
ORDER BY table_type, table_name

इससे आपको सभी स्थायी तालिकाओं की सूची मिल जाएगी (आम तौर पर वे तालिकाएँ जिन्हें आप खोज रहे हैं)। यदि आप *वाइल्डकार्ड को सिर्फ एक में बदलते हैं तो आप सिर्फ टेबल के नाम प्राप्त कर सकते हैं table_nametable_schemaअधिकांश डेटाबेस के लिए सार्वजनिक डिफ़ॉल्ट स्कीमा है जब तक कि आपके व्यवस्थापक ने एक नया स्कीमा स्थापित नहीं किया है।


3
हालांकि यह सच है, यह ओपी के बारे में पूछे गए एक अलग क्लाइंट को संबोधित करता है।
dezso

इसने मेरे लिए बहुत काम किया, और हालांकि मेरा उपयोग मामला ठीक वैसा नहीं था जैसा कि ओपी ने पूछा था, इससे मुझे रैपर के माध्यम से कनेक्ट होने के दौरान टेबल सूची प्राप्त करने में मदद मिली ( जूलियांग लिबक्यू.ज्ल में )
वास

19

यह संभव है कि आपने एक स्कीमा में तालिकाओं को डाला है जो आपके खोज पथ में नहीं है, या डिफ़ॉल्ट, अर्थात, सार्वजनिक और इसलिए तालिकाएँ \ dt का उपयोग करके दिखाई नहीं देंगी। यदि आप एक स्कीमा कहते हैं, कहते हैं, डेटा, तो आप इसे चलाकर ठीक कर सकते हैं,

alter database <databasename> set search_path=data, public;

बाहर निकलें और reenter psql और now \ dt आपको स्कीमा डेटा में भी तालिकाएँ दिखाएंगे।


1
ठीक है, एक सरल set search_path=data, public;चाल, भी :)
dezso

@dezso, क्या यह परिवर्तन स्थायी रूप से, या सिर्फ उस psql सत्र में होता है?
जॉन पॉवेल

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