Wie liste ich alle Datenbanken und Tabellen mit psql auf?

1171

Ich versuche, die PostgreSQL-Administration zu erlernen, und habe begonnen, den Umgang mit dem psqlBefehlszeilentool zu erlernen .

psql --username=postgresWie liste ich alle Datenbanken und Tabellen auf, wenn ich mich mit anmelde?

Ich habe versucht \d, dund dS+doch nichts aufgeführt ist . Ich habe mit pgAdmin III zwei Datenbanken und einige Tabellen erstellt, daher weiß ich, dass sie aufgelistet werden sollten.

Jonas
quelle
1
Wenn Sie über die Befehlszeile darauf zugreifen möchten, führen Siepsql -l
Adriaan
Dieser Kommentar sollte auf jeden Fall eine der Top-Antworten sein! Wenn Sie Auth benötigen, können Sie auch psql --username=postgres -l.
Ulysse BN

Antworten:

1543

Bitte beachten Sie folgende Befehle:

  • \listoder \l: Alle Datenbanken auflisten
  • \dt: listet alle Tabellen in der aktuellen Datenbank auf

Sie werden nie Tabellen in anderen Datenbanken sehen, diese Tabellen sind nicht sichtbar. Sie müssen eine Verbindung zur richtigen Datenbank herstellen, um deren Tabellen (und andere Objekte) anzuzeigen.

So wechseln Sie zwischen Datenbanken:

\connect database_name oder \c database_name

Siehe das Handbuch zu psql .

Frank Heikens
quelle
131
Mit können Sie \c db_nameeine Verbindung zu einer bestimmten Datenbank herstellen.
Eikes
17
\dtscheint nicht alle Tabellen in der aktuellen Datenbank aufzulisten (es scheint diejenigen auszuschließen, die search_pathin mindestens 9.2 nicht gefunden wurden )
Jack Douglas
22
\dt *.listet alle Tabellen in allen Schemata auf, ohne den Suchpfad ändern zu müssen.
Danpelota
19
\ l + ist mein Favorit - es zeigt auch die Festplattennutzung.
Lester Cheung
1
Unter Windows kann ich die Datenbanken mit diesem Befehl psql -U username -lauflisten, aber es funktioniert nicht mit der Slash-Version.
NoNameProvided
350

Dies listet Datenbanken auf:

SELECT datname FROM pg_database
WHERE datistemplate = false;

Hier werden die Tabellen in der aktuellen Datenbank aufgelistet

SELECT table_schema,table_name
FROM information_schema.tables
ORDER BY table_schema,table_name;
RolandoMySQLDBA
quelle
11
Sie haben Recht, aber die Frage betraf die Metabefehle des psql-Tools. \ dt ist viel einfacher als die Eingabe einer Abfrage.
Frank Heikens
19
Ich denke, dies ist eine großartige Antwort, da es von einer Linux-Befehlszeile ausgeführt werden kann, anstatt im psql-Interpreter zu sein, der manchmal für mich mit ExtraPutty hängt.
Liebe und Frieden - Joe Codeswell
2
Auch meinen Tag gerettet. Für meinen speziellen Fall füge ich hinzu, WHERE table_schema = 'public'weil ich nur benutzerdefinierte Tabellen löschen möchte.
Renra,
29
Wenn Sie psql mit dem Flag -E starten, wird die echte Abfrage angezeigt, wenn Sie einen Metabefehl verwenden.
Deebster
Das ist eine gute Antwort. Obwohl OP die Metakommandos wollte, googelte ich dafür und es führte mich zu dieser Frage.
Konto
109

In Postgresql listen diese Terminalbefehle die verfügbaren Datenbanken auf

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

Oder der Befehl lautet einfacher:

psql -U pgadmin -l

Diese Befehle geben dies auf dem Terminal aus:

                                  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)

Dies sind die verfügbaren Datenbanken.

In PSQL listen diese Befehle die verfügbaren Tabellen auf

Sie müssen eine Datenbank angeben, bevor Sie die Tabellen in dieser Datenbank auflisten können.

el@defiant$ psql -U pgadmin -d kurz_prod

Dies bringt Sie zu einem psql-Terminal:

kurz_prod=#

Verwenden Sie den Befehl \d, um alle Tabellen, Ansichten und Sequenzen anzuzeigen

kurz_prod=# \d

Dies druckt:

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

Geben Sie zum Verlassen des psql-Terminals Folgendes ein \qund drücken Sie die Eingabetaste. Oder Ctrl-Dmacht das Gleiche. Dies sind die Tabellen in dieser Datenbank.

Eric Leschinski
quelle
4
\ d listet nicht nur Tabellen auf:\d[S+] list tables, views, and sequences
Jack Douglas
3
Für mich ist dies die "richtige" Antwort, da Sie nicht bereits mit einer vorhandenen Datenbank verbunden sein müssen.
Aardvarkk
71

\list auch eine Abkürzung für \list. Es gibt eine ganze Reihe von Slash-Befehlen, die Sie mit psql auflisten können \?.

Derek Arnold
quelle
35

Um weitere Informationen zur Datenbank- und Tabellenliste zu erhalten, haben Sie folgende Möglichkeiten:

\l+ um Datenbanken aufzulisten

                                                                    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)

und

\d+ um alle Tabellen im aktuellen Suchpfadschema in der aktuellen Datenbank aufzulisten.

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)
Soni Harriz
quelle
33

Von pg_Admin aus können Sie einfach Folgendes in Ihrer aktuellen Datenbank ausführen und es werden alle Tabellen für das angegebene Schema abgerufen:

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

Auf diese Weise erhalten Sie eine Liste aller permanenten Tabellen (im Allgemeinen der Tabellen, nach denen Sie suchen). Sie können nur die Tabellennamen abrufen, wenn Sie den *Platzhalter in "Nur" ändern table_name. Die Öffentlichkeit table_schemaist das Standardschema für die meisten Datenbanken, es sei denn, Ihr Administrator hat ein neues Schema eingerichtet.

Larry W
quelle
3
Dies ist zwar der Fall, spricht jedoch einen anderen Client an als den, nach dem das OP gefragt hat.
29.
Dies hat bei mir sehr gut funktioniert, und obwohl mein Anwendungsfall nicht genau den Anforderungen des OP entsprach, hat es mir geholfen, die Tabellenliste abzurufen, während die Verbindung über einen Wrapper (in Julialang LibPQ.jl ) hergestellt wurde
Vass,
19

Möglicherweise haben Sie die Tabellen in ein Schema eingefügt, das sich nicht in Ihrem Suchpfad befindet, oder in das Standardschema public, sodass die Tabellen nicht mit \ dt angezeigt werden. Wenn Sie ein Schema mit dem Namen "data" verwenden, können Sie dies beheben, indem Sie Folgendes ausführen:

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

Beenden Sie psql und geben Sie es erneut ein. \ Dt zeigt Ihnen auch die Tabellen in den Schemadaten an.

John Powell
quelle
1
Nun, eine einfache set search_path=data, public;würde auch den Trick tun :)
Dezso
@dezso, macht das die Änderung dauerhaft oder nur in dieser psql-Sitzung?
John Powell
Ähm, ich war nicht sehr klar. Es war anstelle des Logout-Login-Zyklus vorgesehen.
Dezso