Wie liste ich alle Datenbanken und Tabellen mit psql auf?


935

Ich versuche, die PostgreSQL-Administration zu erlernen, und habe begonnen, die Verwendung des psql zu erlernen.

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

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

1,226

Bitte beachten Sie folgende Befehle:

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

Sie werden niemals 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

Siehe das Handbuch überpsql.

+115

Sie können '' '\ c db_name''' verwenden, um eine Verbindung zu einer bestimmten Datenbank herzustellen. 17 feb. 132013-02-17 08:57:50

+8

'\ dt' listet anscheinend nicht alle Tabellen in der aktuellen Datenbank auf (es scheint diejenigen auszuschließen, die nicht in' search_path' gefunden wurden, zumindest in 9.2) 06 aug. 132013-08-06 19:42:24

+16

'\ dt * .' listet alle Tabellen in allen Schemata auf, ohne dass Sie Ihren Suchpfad ändern müssen. 24 mär. 152015-03-24 16:10:34

+14

\ l + ist mein Favorit - es zeigt auch die Festplattennutzung. 21 mai. 152015-05-21 05:57:42

  0

Unter Windows kann ich die Datenbanken mit diesem Befehl "psql -U username -l" auflisten, aber es funktioniert nicht mit der Slash-Version. 06 okt. 152015-10-06 15:37:48

  0

Ich suchte nach dieser Art von Befehl 'psql -c" \ l "template1', wo ich ihn von der Kommandozeile ausführen kann. 26 mai. 172017-05-26 19:45:51

  0

Bemerkenswert (ab 9.6): Mit mehr als 2 Schemata in Ihrem Suchpfad und demselben Tabellennamen in verschiedenen Schemata gibt \ dt nur die erste Tabelle mit demselben Namen zurück, entsprechend der Reihenfolge in Suchpfad.Ich fand das komisch. 17 okt. 172017-10-17 16:25:29


64

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


256

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;
+10

Sie haben recht, aber die Frage betraf die Metabefehle des psql-Tools.\ dt ist viel einfacher als die Eingabe einer Abfrage. 18 feb. 112011-02-18 07:50:28

+11

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. 16 mai. 152015-05-16 17:51:18

+1

Auch meinen Tag gerettet.In meinem speziellen Fall füge ich WHERE table_schema = 'public' hinzu, weil ich nur benutzerdefinierte Tabellen löschen möchte. 28 sep. 152015-09-28 15:31:58

+18

Wenn Sie psql mit dem Flag -E starten, wird die echte Abfrage angezeigt, wenn Sie einen Metabefehl verwenden. 13 jan. 162016-01-13 09:03:31

  0

Das ist eine gute Antwort.Obwohl OP die Metakommandos wollte, googelte ich dafür und es führte mich zu dieser Frage. 03 aug. 172017-08-03 00:40:17


88

In Postgresql listen diese Terminalbefehle die verfügbaren Datenbanken auf

[email protected] $/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.

[email protected]$ psql -U pgadmin -d kurz_prod

Dies bringt Sie zu einem psql-Terminal:

kurz_prod=#

Verwenden Sie den Befehl\dBedeutung zeigt alle Tabellen, Ansichten und Sequenzen

kurz_prod=# \d

Dies druckt:

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

Geben Sie dann Folgendes ein, um das psql-Terminal zu verlassen\qund drücken Sie die Eingabetaste.OderCtrl-Dmacht das gleiche.Dies sind die Tabellen in dieser Datenbank.

+4

\ d listet nicht nur Tabellen auf: '\ d [S +] listet Tabellen, Views und Sequenzen auf' 06 aug. 132013-08-06 19:43:18

+2

Für mich ist dies die "richtige" Antwort, da Sie nicht bereits mit einer vorhandenen Datenbank verbunden sein müssen. 14 mär. 172017-03-14 15:11:47


25

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

Dadurch erhalten Sie eine Liste aller permanenten Tabellen (im Allgemeinen der Tabellen, nach denen Sie suchen).Sie können nur die Tabellennamen erhalten, wenn Sie die ändern*Platzhalter für nur dietable_name.Die Öffentlichkeittable_schemaist das Standardschema für die meisten Datenbanken, sofern Ihr Administrator kein neues Schema eingerichtet hat.

+3

Dies ist zwar der Fall, spricht jedoch einen anderen Client an als den, nach dem das OP gefragt hat. 29 nov. 122012-11-29 17:56:23


17

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 set search_path=data, public;

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

+1

Nun, ein einfaches 'set search_path = data, public;' würde auch den Trick machen :) 03 apr. 142014-04-03 14:57:26

  0

@dezso, macht das die Änderung dauerhaft oder nur in dieser psql-Sitzung? 03 apr. 142014-04-03 17:40:36

  0

Ähm, ich war nicht sehr klar.Es war anstelle des Logout-Login-Zyklus vorgesehen. 03 apr. 142014-04-03 18:12:37


24

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)