Ich versuche, die PostgreSQL-Administration zu lernen, und habe begonnen, die Verwendung des Befehlszeilentools psql
zu erlernen.
Wenn ich mich mit psql --username=postgres
anmelde, wie liste ich alle Datenbanken und Tabellen auf?
Ich habe versucht, \d
, d
und dS+
, aber es wird nichts aufgelistet. Ich habe mit pgAdmin III zwei Datenbanken und einige Tabellen erstellt, daher weiß ich, dass sie aufgelistet werden sollten.
Kommentare
- Wenn Sie darauf zugreifen möchten Führen Sie über die Befehlszeile
psql -l
- aus. Dieser Kommentar sollte definitiv eine der besten Antworten sein! Wenn Sie eine Authentifizierung benötigen, können Sie auch
psql --username=postgres -l
.
Antwort
Bitte beachten Sie die folgenden Befehle:
-
\list
oder\l
: Alle Datenbanken auflisten -
\dt
: Listet alle Tabellen in der aktuellen Datenbank mit Ihrersearch_path
- : Listet alle Tabellen in der aktuellen Datenbank auf, unabhängig von Ihrer
search_path
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 die Datenbank:
\connect database_name
oder \c database_name
Weitere Informationen finden Sie im Handbuch zu psql .
Kommentare
- Sie können
\c db_name
verwenden, um eine Verbindung zu einer bestimmten Datenbank herzustellen. -
\dt
nicht ‚ t scheint nicht alle Tabellen in der aktuellen Datenbank aufzulisten (es scheint diejenigen auszuschließen, die ‚ nicht in dersearch_path
gefunden wurden mindestens unter 9.2) -
\dt *.
listet alle Tabellen in allen Schemas auf, ohne dass Sie Ihren Suchpfad ändern müssen. - \ l + ist Mein Favorit – es zeigt auch die Festplattennutzung an.
- Unter Windows kann ich die Datenbanken mit diesem Befehl
psql -U username -l
auflisten, aber es funktioniert nicht mit der Schrägstrichversion.
Antwort
Hier werden Datenbanken aufgelistet:
SELECT datname FROM pg_database WHERE datistemplate = false;
Hier werden Tabellen in der aktuellen Datenbank aufgelistet.
SELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;
Kommentare
- Sie ‚ stimmt, aber die Frage betraf die Meta-Befehle des psql-Tools. \ dt ist viel einfacher als das Eingeben einer Abfrage.
- Ich denke, dies ist eine großartige Antwort, da sie über eine Linux-Befehlszeile ausgeführt werden kann, anstatt im psql-Interpreter zu sein, der manchmal für mich hängt ExtraPutty.
- Auch meinen Tag gerettet. Für meinen speziellen Fall füge ich ‚
WHERE table_schema = 'public'
hinzu, weil ich nur benutzerdefinierte Tabellen löschen möchte. - Wenn Sie beginnen psql mit dem Flag -E zeigt die reale Abfrage an, wenn Sie einen Meta-Befehl verwenden.
- Ja, ich denke, ‚ ist eine gute Antwort Mit dieser Option können Sie die Datenbanken kontrollierter verbinden und abfragen, insbesondere wenn Sie ein Skript aus einer großen Datenbankliste generieren möchten. Vielen Dank.
Antwort
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 drucken dies auf dem Terminal:
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 vor Ihnen eine Datenbank angeben kann die Tabellen in dieser Datenbank auflisten.
el@defiant$ psql -U pgadmin -d kurz_prod
Damit gelangen 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)
Um das psql-Terminal zu verlassen, geben Sie \q
ein und drücken Sie die Eingabetaste. Oder Ctrl-D
macht dasselbe. Dies sind die Tabellen in dieser Datenbank.
Kommentare
- \ d listet nicht nur Tabellen auf:
\d[S+] list tables, views, and sequences
- Für mich ist dies die “ richtige “ Antwort, da sie nicht Sie müssen nicht bereits mit einer vorhandenen Datenbank verbunden sein.
- Ein Liner zur Verwendung in Skripten (als Root):
su - -c 'psql -U postgres postgres -P pager=off -P tuples_only=on -l' postgres | cut -d'|' -f1 | tr -d '[:blank:]' | grep -vE '$^'
Antwort
\l
ist auch eine Abkürzung für \list
. Es gibt einige Schrägstriche, die Sie mit \?
in psql auflisten können.
Antwort
Um weitere Informationen zur Datenbank- und Tabellenliste zu erhalten, haben Sie folgende Möglichkeiten:
\l+
zum Auflisten von Datenbanken
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)
Antwort
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
Damit erhalten Sie Eine Liste aller permanenten Tabellen (im Allgemeinen die Tabellen, nach denen Sie suchen). Sie können nur die Tabellennamen abrufen, wenn Sie den Platzhalter *
in nur den . Das öffentliche table_schema
ist das Standardschema für die meisten Datenbanken, es sei denn, Ihr Administrator hat ein neues Schema eingerichtet.
Kommentare
- Dies ist zwar richtig, spricht jedoch einen anderen Client an als das OP nachfragte.
- Dies funktionierte hervorragend für mich, und obwohl mein Anwendungsfall nicht genau das war, wonach das OP gefragt hatte, half es mir, die Tabellenliste zu erhalten, während ich über einen Wrapper verbunden war (in Julialang) LibPQ.jl )
Antwort
Möglicherweise haben Sie die Tabellen in a eingefügt Schema, das sich nicht in Ihrem Suchpfad befindet, oder das Standardschema, dh public, und daher werden die Tabellen nicht mit \ dt angezeigt. Wenn Sie ein Schema verwenden, das beispielsweise Daten heißt, können Sie dies beheben, indem Sie
alter database <databasename> set search_path=data, public;
ausführen und psql und jetzt erneut eingeben \ dt zeigt Ihnen die Tabellen auch in Schemadaten an.
Kommentare
- Nun, eine einfache
set search_path=data, public;
würde auch den Trick machen 🙂 - @dezso, macht das die Änderung dauerhaft oder nur in dieser psql-Sitzung?
- Ähm, ich war nicht sehr klar. Es war anstelle des Abmelde- / Anmeldezyklus vorgesehen.