Tüm veritabanlarını ve tabloları psql kullanarak nasıl listeleyebilirim?


1171

PostgreSQL yönetimini öğrenmeye çalışıyorum ve psqlkomut satırı aracının nasıl kullanılacağını öğrenmeye başladım .

Giriş yaptığımda psql --username=postgres, tüm veritabanlarını ve tabloları nasıl listelerim?

Denedim \d, dve dS+fakat hiçbir şey listelenir. PgAdmin III ile iki veritabanı ve birkaç tablo oluşturdum, bu yüzden bunların listelenmesi gerektiğini biliyorum.


1
Komut satırı üzerinden erişmek istiyorsanız, çalıştırınpsql -l
adriaan

Bu yorum kesinlikle en iyi cevaplardan biri olmalı! Eğer auth'ya ihtiyacınız varsa da yapabilirsiniz psql --username=postgres -l.
Ulysse BN

Yanıtlar:


1543

Lütfen aşağıdaki komutlara dikkat edin:

  • \listveya \l: tüm veritabanlarını listeler
  • \dt: mevcut veritabanındaki tüm tabloları listele

Asla diğer veritabanlarında tablo göremezsiniz, bu tablolar görünmez. Tablolarını (ve diğer nesneleri) görmek için doğru veritabanına bağlanmak zorundasınız.

Veritabanlarını değiştirmek için:

\connect database_name veya \c database_name

Psql ile ilgili kılavuza bakın .


131
\c db_nameBelirli bir veritabanına bağlanmak için kullanabilirsiniz .
Şubat'ta eikes

17
\dtmevcut veritabanındaki tüm tabloları listeliyor görünmüyor ( search_pathen azından 9.2'de bulunmayanları hariç tutuyor gibi görünüyor )
Jack Douglas

22
\dt *.Arama yolunuzu değiştirmek zorunda kalmadan tüm tabloları tüm şemalarda listeler.
danpelota

19
\ l + benim favorim - disk kullanımını da gösterir.
Lester Cheung

1
Windows'ta veritabanlarını bu komutla listeleyebilirim, psql -U username -lancak eğik çizgi sürümü ile çalışmaz.
NoName

350

Bu veritabanlarını listeler:

SELECT datname FROM pg_database
WHERE datistemplate = false;

Bu, mevcut veritabanındaki tabloları listeler.

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

11
Haklısın, ama soru psql aracının meta-komutları ile ilgiliydi. \ dt, herhangi bir sorgu yazmaktan çok daha kolaydır.
Frank Heikens

19
Bunun BÜYÜK bir cevap olduğunu düşünüyorum, çünkü bazen ExtraPutty kullanarak benim için takılan psql yorumlayıcısında bulunmaya ihtiyaç duymanın aksine bir Linux komut satırından çalıştırılabilir.
Sevgi ve barış - Joe Codeswell 16:15

2
Ayrıca günümü kurtardım. Özel durumum için ekliyorum WHERE table_schema = 'public'çünkü sadece özel tabloları bırakmak istiyorum.
Renra

29
Psql'yi -E bayrağıyla başlatırsanız, bir meta-komut kullandığınızda gerçek sorguyu görüntüler.
Deebster

Bu iyi bir cevap. OP metakomutları istemesine rağmen, bunun için Googling'dim ve bu da beni bu soruya yönlendirdi.
Dışarıda Hesap Atma

109

Postgresql'de bu terminal komutları mevcut veritabanlarını listeler.

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

Veya emir daha basit ifade etti:

psql -U pgadmin -l

Bu komutlar bunu terminalde yazdırır:

                                  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)

Bunlar mevcut veritabanları.

PSQL'de bu komutlar mevcut tabloları listeler.

Bu veritabanındaki tabloları listelemeden önce bir veritabanı belirtmelisiniz.

el@defiant$ psql -U pgadmin -d kurz_prod

Bu sizi bir psql terminaline getiriyor:

kurz_prod=#

\dTüm tabloları, görünümleri ve dizileri göster komutunu kullanın

kurz_prod=# \d

Bu yazdırır:

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

Ardından, psql terminalinden çıkmak için \qyazıp enter tuşuna basın. Veya Ctrl-Daynı şeyi yapar. Bunlar o veritabanındaki tablolar.


4
sadece tabloları listelemekle kalmaz:\d[S+] list tables, views, and sequences
Jack Douglas

3
Bana göre, bu "doğru" cevap, çünkü zaten mevcut bir veritabanına bağlanmanızı gerektirmiyor.
aardvarkk

71

\laynı zamanda kısaca \list. Kullanarak psql içinde listeleyebileceğiniz epeyce eğik çizgi komutları vardır \?.


35

Veri tabanı ve tablo listesi hakkında daha fazla bilgi edinmek için şunları yapabilirsiniz:

\l+ veritabanlarını listelemek

                                                                    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)

ve

\d+ Geçerli veritabanındaki geçerli search_path şemasındaki tüm tabloları listelemek için.

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'den geçerli veritabanınızda aşağıdakileri kolayca çalıştırabilirsiniz ve belirtilen şema için tüm tabloları alır:

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

Bu, size tüm kalıcı tabloların bir listesini verecektir (genellikle aradığınız tabloları). *Joker karakteri yalnızca olarak değiştirirseniz, yalnızca tablo adlarını alabilirsiniz table_name. Genel table_schema, yöneticiniz yeni bir şema ayarlamadığı sürece çoğu veritabanı için varsayılan şemadır.


3
Bu doğru olsa da, OP hakkında sorulandan farklı bir müşteriyi ele alıyor.
dezso

Bu benim için çok işe yaradı ve kullanım durumum tam olarak OP'nin istediği gibi olmamasına rağmen, sarıcı ile bağlanırken masa listesini almama yardım etti ( Julialang LibPQ.jl'de )
Vass

19

Tabloları, arama yolunuzda olmayan bir şemaya veya varsayılan, yani genel olan bir şemaya eklemiş olabilirsiniz, böylece tablolar \ dt kullanarak görünmez. Veri denilen bir şema kullanıyorsanız, çalıştırarak bunu düzeltebilirsiniz,

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

Çıkın ve psql'ye yeniden girin ve şimdi \ dt size şema verilerindeki tabloları gösterecektir.


1
Eh, basit bir set search_path=data, public;de hile yapardı :)
dezso

@dezso, bu değişikliği kalıcı olarak mı yoksa sadece psql oturumunda mı yapıyor?
John Powell,

Err, çok net değildim. Logout-login döngüsü yerine amaçlanmıştır.
dezso
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.