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.