PostgreSQL: Tabellen in PostgreSQL anzeigen

Antworten:

2661

Über die psqlBefehlszeilenschnittstelle

Wählen Sie zunächst Ihre Datenbank aus

\c database_name

Dies zeigt dann alle Tabellen im aktuellen Schema:

\dt

Programmatisch (oder psqlnatürlich auch über die Schnittstelle):

SELECT * FROM pg_catalog.pg_tables;

Die Systemtabellen befinden sich in der pg_catalogDatenbank.

Mihai Limbășan
quelle
102
@StephenCorwin Nein, \lentspricht show databasesMySQL. dtshow tablesund lshow databases
user454322
12
\dtist sehr nützlich. Dies pg_catalog.pg_tablesist viel weniger der Fall, da interne Tabellen zusammen mit den vom Benutzer erstellten Tabellen für jede Datenbank zusammengefasst werden, mit der Sie gerade verbunden sind.
aroth
33
psql my_db_namesollte ausgeführt werden, um \dtzu arbeiten. Als ich psqlohne Datenbanknamen lief , bekam ich eine Nachricht "Keine Beziehungen gefunden"
Maksim Dmitriev
31
Ohne Systemtabellen:SELECT * FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema'
Matt White
39
Sie müssen zuerst \c <DATABASE_NAME>Ihre Datenbank auswählen.
Danio
200

Als Superuser anmelden:

sudo -u postgres psql

Sie können alle Datenbanken und Benutzer nach \lBefehl auflisten (andere Befehle nach auflisten \?).

Nun , wenn Sie andere Datenbanken sehen möchten , können Sie Benutzer / Datenbank ändern , indem Sie \cwie Befehl \c template1, \c postgres postgresund die Verwendung \d, \dtoder \dSum zu sehen , Tabellen / Ansichten / etc.

JLarky
quelle
1
Dies ist eine bessere Antwort, da in der Regel mehr als eine Datenbank installiert ist.
Jerome
Das war sehr hilfreich. Vielen Dank.
Versprich Preston
123

(Zur Vollständigkeit)

Sie können auch das Informationsschema (SQL-Standard) abfragen :

SELECT
    table_schema || '.' || table_name
FROM
    information_schema.tables
WHERE
    table_type = 'BASE TABLE'
AND
    table_schema NOT IN ('pg_catalog', 'information_schema');
Milen A. Radev
quelle
3
+1 Obwohl der Vollständigkeit halber in mysql show tables nur das aktuelle Schema angezeigt wird, ist es gut, es so zu sehen. Mysql hat nur eine Datenbank, aber mehrere Schemas, wobei postgresql mehrere Datenbanken (Kataloge) und Schemas haben kann. Das Äquiv sollte also table_schema = 'DB_NAME' sein;
Rahly
Nicht gerade Standard-SQL, kann nicht "||" verwenden Strings auf mssql zu verketten
ChRoNoN
123

Sie können das interaktive Terminal Psql von PostgreSQL verwenden, um Tabellen in PostgreSQL anzuzeigen.

1. Starten Sie Psql

Normalerweise können Sie den folgenden Befehl ausführen, um psql einzugeben:

psql DBNAME USERNAME

Zum Beispiel, psql template1 postgres

Eine Situation, die Sie möglicherweise haben, ist: Angenommen, Sie melden sich als root an und erinnern sich nicht an den Datenbanknamen. Sie können Psql einfach zuerst eingeben, indem Sie Folgendes ausführen:

sudo -u postgres psql

In einigen Systemen ist der Befehl sudo nicht verfügbar. Sie können stattdessen einen der folgenden Befehle ausführen:

psql -U postgres
psql --username=postgres

2. Tabellen anzeigen

Jetzt können Sie in Psql Befehle ausführen wie:

  1. \? Listen Sie alle Befehle auf
  2. \l Datenbanken auflisten
  3. \conninfo Informationen zur aktuellen Verbindung anzeigen
  4. \c [DBNAME] Verbindung zu neuer Datenbank herstellen, z. \c template1
  5. \dt Listet Tabellen des öffentlichen Schemas auf
  6. \dt <schema-name>.* Listen Sie Tabellen bestimmter Schemata auf, z. \dt public.*
  7. \dt *.* Liste Tabellen aller Schemata
  8. Dann können Sie SQL-Anweisungen ausführen, z. B. SELECT * FROM my_table;(Hinweis: Eine Anweisung muss mit einem Semikolon abgeschlossen werden. ;)
  9. \q Beenden Sie psql
Yuci
quelle
52
  1. Erste Anmeldung als Postgres-Benutzer:

    sudo su - postgres

  2. Verbindung zur gewünschten Datenbank herstellen: psql -d databaseName

  3. \dt würde die Liste aller Tabellen in der Datenbank zurückgeben, mit der Sie verbunden sind.

nish
quelle
40

Wenn Sie psql mit dem Flag -E ausführen, wird die Abfrage wiederholt, die intern zum Implementieren von \ dt und ähnlichem verwendet wird:

sudo -u postgres psql -E

postgres=# \dt       
********* QUERY **********
SELECT n.nspname as "Schema",
c.relname as "Name", 
CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' END as "Type",
pg_catalog.pg_get_userbyid(c.relowner) as "Owner"
FROM pg_catalog.pg_class c
    LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','')
    AND n.nspname <> 'pg_catalog'
    AND n.nspname <> 'information_schema'
    AND n.nspname !~ '^pg_toast'
AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;        
**************************
bsb
quelle
1
Übrigens wird TOAST verwendet, um große Werte zu speichern: postgresql.org/docs/8.3/static/storage-toast.html
Dorian
39

Melden Sie sich als Superuser an, damit Sie alle Datenbanken und ihre Schemata überprüfen können: -

sudo su - postgres

Dann können wir mit dem folgenden Befehl zur postgresql-Shell gelangen: -

psql

Sie können jetzt die gesamte Datenbankliste mit dem folgenden Befehl überprüfen: -

\l

Wenn Sie auch die Größe der Datenbanken überprüfen möchten, verwenden Sie: -

\l+

Drücken Sie q, um zurückzukehren.

Sobald Sie Ihre Datenbank gefunden haben, können Sie mit dem folgenden Befehl eine Verbindung zu dieser Datenbank herstellen: -

\c database_name

Sobald die Verbindung hergestellt ist, können Sie die Datenbanktabellen oder das Schema überprüfen, indem Sie: -

\d

Um zur Shell zurückzukehren, verwenden Sie: -

q

Um die Details einer bestimmten Tabelle weiter zu sehen, verwenden Sie: -

\d table_name

Um zu postgresql_shell zurückzukehren, drücken Sie \q.

Und um zum Terminal zurückzukehren, drücken Sie exit.

Shashishekhar Hasabnis
quelle
24

Wenn Sie nur die Liste der von Ihnen erstellten Tabellen anzeigen möchten, können Sie nur sagen:

\dt

Wir haben aber auch welche, mit PATTERNdenen Sie die anzuzeigenden Tabellen anpassen können. Um alle einschließlich pg_catalogSchema anzuzeigen, können Sie hinzufügen *.

\dt *

Wenn Sie tun: \?

\ dt [S +] [MUSTER] Listentabellen

Banned_User
quelle
23

Verwenden Sie nur eine Tabelle sehen

=> \dt

Wenn Sie Schematabellen sehen möchten

=>\dt+

Wenn Sie bestimmte Schematabellen anzeigen möchten

=>\dt schema_name.* 
arisch
quelle
Ich bin ziemlich sicher , Sie verwirren +mit S. Letzteres (der Buchstabe) zeigt Schematabellen. Das +zeigt einfach zusätzliche Informationen.
Garret Wilson
20

Stellen Sie zunächst mit dem folgenden Befehl eine Verbindung zur Datenbank her

\c database_name

Und Sie werden diese Nachricht sehen - You are now connected to database database_name. Und sie führen den folgenden Befehl aus

SELECT * FROM table_name;

In Datenbankname und Tabellenname aktualisieren Sie einfach mit Ihrem Datenbank- und Tabellennamen

J4cK
quelle
20
Ich bin nicht sicher, ob dies die Frage beantwortet. Ich denke, das OP versucht (hat), alle Tabellen in seiner Datenbank zu kennen und nicht alle Zeilen aus einer bestimmten Tabelle in seiner Datenbank abzurufen ... richtig?
kuschelt sich
16

Wenn Sie pgAdmin4 in PostgreSQL verwenden, können Sie damit die Tabellen in Ihrer Datenbank anzeigen:

select * from information_schema.tables where table_schema='public';
Reynante Daitol
quelle
14

Beachten Sie, dass \dtnur Tabellen im öffentlichen Schema der von Ihnen verwendeten Datenbank aufgelistet werden. Ich mag es, meine Tabellen in separaten Schemata zu halten, daher hat die akzeptierte Antwort bei mir nicht funktioniert.

Um alle Tabellen innerhalb eines bestimmten Schemas aufzulisten , musste ich:

1) Stellen Sie eine Verbindung zur gewünschten Datenbank her:

psql mydb

2) Geben Sie den Schemanamen an, für den Tabellen nach dem \dtBefehl angezeigt werden sollen, wie folgt:

\dt myschema.*

Dies zeigt mir die Ergebnisse, die mich interessieren:

               List of relations
 Schema   |       Name      | Type  |  Owner   
----------+-----------------+-------+----------
 myschema | users           | table | postgres
 myschema | activity        | table | postgres
 myschema | roles           | table | postgres
Wählscheibe
quelle
12
select 
  * 
from 
  pg_catalog.pg_tables 
where 
  schemaname != 'information_schema' 
  and schemaname != 'pg_catalog';
Abdelhak Ohammou
quelle
8

\ dt (kein * erforderlich) - listet alle Tabellen für eine vorhandene Datenbank auf, mit der Sie bereits verbunden sind. Auch nützlich zu beachten:

\ d [Tabellenname] - Zeigt alle Spalten für eine bestimmte Tabelle an, einschließlich Typinformationen, Referenzen und Schlüsseleinschränkungen.

user4642897
quelle
6

Sie können die Tabellen in der aktuellen Datenbank mit auflisten \dt .

Fwiw \d tablenamezeigt Details zu der angegebenen Tabelle an, ähnlich wie show columns from tablenamein MySQL, jedoch mit etwas mehr Informationen.

JohnK
quelle
5

Verwenden von psql : \ dt

Oder:

SELECT c.relname AS Tables_in FROM pg_catalog.pg_class c
        LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE pg_catalog.pg_table_is_visible(c.oid)
        AND c.relkind = 'r'
        AND relname NOT LIKE 'pg_%'
ORDER BY 1
MisterJoyson
quelle
3

Zunächst müssen Sie sich wie mit Ihrer Datenbank verbinden

Meine Datenbank ist Ubuntu

Verwenden Sie diesen Befehl, um eine Verbindung herzustellen

 \c ubuntu

Diese Meldung wird angezeigt

"Sie sind jetzt als Benutzer" postgres "mit der Datenbank" ubuntu "verbunden."

Jetzt

Führen Sie diesen Befehl aus, um alle darin enthaltenen Tabellen anzuzeigen

\d+
Usman Yaqoob
quelle
3

Der einfachste Weg, alle Tabellen in der Befehlszeile aufzulisten, ist für meinen Geschmack:

psql -a -U <user> -p <port> -h <server> -c "\dt"

Fügen Sie für eine bestimmte Datenbank einfach den Datenbanknamen hinzu:

psql -a -U <user> -p <port> -h <server> -c "\dt" <database_name>

Es funktioniert sowohl unter Linux als auch unter Windows.

Alain Cherpin
quelle
3

als schneller Oneliner

# just list all the postgres tables sorted in the terminal
db='my_db_name'
clear;psql -d $db -t -c '\dt'|cut -c 11-|perl -ne 's/^([a-z_0-9]*)( )(.*)/$1/; print'

oder wenn Sie einen viel klareren json output multi-liner bevorzugen:

IFS='' read -r -d '' sql_code <<"EOF_CODE"
    select array_to_json(array_agg(row_to_json(t))) from (
        SELECT table_catalog,table_schema,table_name 
        FROM information_schema.tables
        ORDER BY table_schema,table_name ) t
EOF_CODE
psql -d postgres -t -q -c "$sql_code"|jq
Yordan Georgiev
quelle
1

\ dt listet Tabellen auf und "\ pset pager off" zeigt sie im selben Fenster an, ohne zu einer separaten zu wechseln. Lieben Sie dieses Merkmal zu Tode in dbshell.

lauri108
quelle
0

Führen Sie aus, um fremde Tabellen in psql anzuzeigen \dE

Ian Hunter
quelle
0

Geben Sie zunächst ein, welche Datenbank Sie verbinden müssen

\c database_name

Dies zeigt dann alle Tabellen im aktuellen Schema:

\dt
Poonkodi
quelle
-2

Zuerst können Sie sich mit der postgrre.app auf dem Mac oder mit postico mit Ihrer postgres-Datenbank verbinden. Führen Sie den folgenden Befehl aus:

psql -h localhost -p port_number -d database_name -U user_name -W

Wenn Sie dann Ihr Passwort eingeben, sollte dies den Zugriff auf Ihre Datenbank ermöglichen

Patcho
quelle