Jak wyświetlić listę wszystkich baz danych i tabel za pomocą psql?


1171

Próbuję nauczyć się administracji PostgreSQL i zacząłem uczyć się korzystania z psqlnarzędzia wiersza poleceń.

Kiedy się loguję psql --username=postgres, jak wyświetlić listę wszystkich baz danych i tabel?

Próbowałem \d, da dS+jednak nic nie ma na liście. Utworzyłem dwie bazy danych i kilka tabel za pomocą pgAdmin III, więc wiem, że powinny być wymienione.


1
Jeśli chcesz uzyskać do niego dostęp za pomocą wiersza polecenia, uruchompsql -l
adriaan

Ten komentarz zdecydowanie powinien być jedną z najlepszych odpowiedzi! Jeśli potrzebujesz uwierzytelnienia, możesz również psql --username=postgres -l.
Ulysse BN

Odpowiedzi:


1543

Proszę zwrócić uwagę na następujące polecenia:

  • \listlub \l: wymień wszystkie bazy danych
  • \dt: wyświetl wszystkie tabele w bieżącej bazie danych

Nigdy nie zobaczysz tabel w innych bazach danych, tabele te nie są widoczne. Musisz połączyć się z właściwą bazą danych, aby zobaczyć jej tabele (i inne obiekty).

Aby przełączyć bazy danych:

\connect database_name lub \c database_name

Zobacz instrukcję o psql .


131
Możesz użyć, \c db_nameaby połączyć się z określoną bazą danych.
eikes

17
\dtnie wydaje się wyświetlać wszystkich tabel w bieżącej bazie danych (wydaje się, że wyklucza te, które nie zostały znalezione search_pathprzynajmniej w wersji 9.2)
Jack Douglas

22
\dt *.wyświetli listę wszystkich tabel we wszystkich schematach, bez konieczności modyfikowania ścieżki wyszukiwania.
danpelota

19
\ l + jest moim ulubionym - pokazuje również użycie dysku.
Lester Cheung

1
W systemie Windows mogę wyświetlić listę baz danych za pomocą tego polecenia, psql -U username -lale to nie działa z wersją slash.
NoNameProvided

350

Zawiera listę baz danych:

SELECT datname FROM pg_database
WHERE datistemplate = false;

Zawiera listę tabel w bieżącej bazie danych

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

11
Masz rację, ale pytanie dotyczyło meta-poleceń narzędzia psql. \ dt jest znacznie łatwiejsze niż wpisywanie dowolnego zapytania.
Frank Heikens,

19
Myślę, że jest to WIELKA odpowiedź, ponieważ można ją wykonać z wiersza poleceń systemu Linux, w przeciwieństwie do konieczności korzystania z interpretera psql, który czasami zawiesza się dla mnie za pomocą ExtraPutty.
Miłość i pokój - Joe Codeswell

2
Uratowałem też mój dzień. W moim konkretnym przypadku dodaję, WHERE table_schema = 'public'ponieważ chcę porzucić tylko niestandardowe tabele.
Renra,

29
Jeśli uruchomisz psql z flagą -E, wyświetli prawdziwe zapytanie, gdy użyjesz meta-polecenia.
Deebster

To dobra odpowiedź. Chociaż OP chciał metacommands, szukałem go w Google, co doprowadziło mnie do tego pytania.
Wyrzuć konto

109

W Postgresql te polecenia terminala wyświetlają listę dostępnych baz danych

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

Lub polecenie brzmiało prościej:

psql -U pgadmin -l

Te polecenia drukują to na terminalu:

                                  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)

To są dostępne bazy danych.

W PSQL te polecenia wyświetlają listę dostępnych tabel

Musisz określić bazę danych, aby móc wyświetlić tabele w tej bazie danych.

el@defiant$ psql -U pgadmin -d kurz_prod

To prowadzi do terminala psql:

kurz_prod=#

Użyj polecenia \doznaczającego pokaż wszystkie tabele, widoki i sekwencje

kurz_prod=# \d

To drukuje:

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

Następnie, aby wyjść z terminala psql, wpisz \qi naciśnij klawisz enter. Lub Ctrl-Drobi to samo. To są tabele w tej bazie danych.


4
\ d nie tylko wyświetla tabele:\d[S+] list tables, views, and sequences
Jack Douglas

3
Dla mnie jest to „poprawna” odpowiedź, ponieważ nie wymaga już połączenia z istniejącą bazą danych.
aardvarkk

71

\ljest również skrótem od \list. Istnieje wiele poleceń ukośnika, które można wyświetlić w psql za pomocą \?.


35

Aby uzyskać więcej informacji o bazie danych i liście tabel, możesz:

\l+ do listy baz danych

                                                                    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)

i

\d+ aby wyświetlić listę wszystkich tabel w bieżącym schemacie ścieżka_wyszukiwania w bieżącej bazie danych.

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

Z pg_Admin możesz po prostu uruchomić następujące operacje na bieżącej bazie danych, a uzyska wszystkie tabele dla określonego schematu:

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

Otrzymasz listę wszystkich stałych tabel (ogólnie tych, których szukasz). Możesz uzyskać tylko nazwy tabel, jeśli zmienisz *symbol wieloznaczny na tylko table_name. Publiczny table_schemajest domyślnym schematem dla większości baz danych, chyba że administrator skonfigurował nowy schemat.


3
Chociaż jest to prawda, dotyczy to innego klienta niż ten, o który prosi OP.
dezso

Działa to świetnie dla mnie i chociaż mój przypadek użycia nie był dokładnie tym, o co poprosił OP, pomógł mi uzyskać listę tabel podczas połączenia za pomocą otoki (w Julialang LibPQ.jl )
Vass

19

Możliwe, że wstawiłeś tabele do schematu, który nie znajduje się na ścieżce wyszukiwania, lub domyślny, tj. Publiczny, więc tabele nie będą wyświetlane przy użyciu \ dt. Jeśli używasz schematu o nazwie powiedzmy dane, możesz to naprawić, uruchamiając,

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

Wyjdź i ponownie wprowadź psql, a teraz \ dt wyświetli również tabele w danych schematu.


1
Cóż, proste też set search_path=data, public;by to
załatwiły

@dezso, czy to powoduje zmianę na stałe, czy tylko w tej sesji psql?
John Powell,

Err, nie byłem bardzo jasny. Było to zamierzone zamiast cyklu wylogowania-logowania.
dezso
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.