Listen Sie Tabellen in einem PostgreSQL-Schema auf

329

Wenn ich eine \dtin psql mache, bekomme ich nur eine Liste der Tabellen im aktuellen Schema ( publicstandardmäßig).

Wie kann ich eine Liste aller Tabellen in allen Schemas oder einem bestimmten Schema erhalten?

Nyxynyx
quelle

Antworten:

505

In allen Schemata:

=> \dt *.*

In einem bestimmten Schema:

=> \dt public.*

Es ist möglich, reguläre Ausdrücke mit einigen Einschränkungen zu verwenden

\dt (public|s).(s|t)
       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 public | s    | table | cpn
 public | t    | table | cpn
 s      | t    | table | cpn

Fortgeschrittene Benutzer können Notationen mit regulären Ausdrücken wie Zeichenklassen verwenden, z. B. [0-9], um mit einer beliebigen Ziffer übereinzustimmen. Alle Sonderzeichen für reguläre Ausdrücke funktionieren wie in Abschnitt 9.7.3 angegeben, mit der Ausnahme, dass .sie wie oben erwähnt als Trennzeichen verwendet werden, *das in die Notation für reguläre Ausdrücke übersetzt wird .*, in ?die übersetzt .wird und $die buchstäblich übereinstimmt. Sie können diese Musterzeichen bei Bedarf emulieren, indem Sie ?für ., (R+|)für R*oder (R|)für schreiben R?. $wird nicht als Zeichen für reguläre Ausdrücke benötigt, da das Muster im Gegensatz zur üblichen Interpretation regulärer Ausdrücke (mit anderen Worten:$wird automatisch an Ihr Muster angehängt). Schreiben Sie *am Anfang und / oder Ende, wenn Sie nicht möchten, dass das Muster verankert wird. Beachten Sie, dass in doppelten Anführungszeichen alle Sonderzeichen mit regulären Ausdrücken ihre Sonderbedeutung verlieren und buchstäblich übereinstimmen. Außerdem werden die Sonderzeichen für reguläre Ausdrücke in Operator-Namensmustern (dh dem Argument von \do) buchstäblich abgeglichen .

Clodoaldo Neto
quelle
6
\dtIst einfach gleichbedeutend mit \dt public.*, habe ich recht?
Frozen Flame
Wie wäre es beispielsweise mit zwei bestimmten Tabellen in einem bestimmten Schema? Wie \dt public.user_info, public.user_scope?
James M. Lay
Egal, es ist einfacher, nur in \dt public.a; \dt public.b;einer Zeile zu arbeiten.
James M. Lay
es ist irgendwie implizit .. Wenn \ dt nur "öffentliche" Tabellen gibt, würde man über reguläre Ausdrücke nichts mehr erwarten ..
mehmet
1
@FrozenFlame Es ist nicht! Standardmäßig es zeigt , was in Ihrem ist search_path, und dass die Standardwerte "$user", public.*. Folglich werden set search_path=s; \dtalle Tabellen im Schema aufgelistet s.
Lukas Juhrich
257

Sie können die Tabellen aus auswählen information_schema

SELECT * FROM information_schema.tables 
WHERE table_schema = 'public'
Jakub Kania
quelle
6
Sehr hilfreich, wenn Ihre Benutzeroberfläche die Verknüpfungen nicht unterstützt. Vielen Dank.
Matt Bannert
1
Dies ist auch schön, weil Sie so etwas wie table_schema, table_name aus information_schema.tables auswählen können, wobei table_name wie '% Whatever%'; Wenn Sie wissen müssen, in welchem ​​Schema sich die Tabelle befindet. Sie sind sich nicht sicher, ob Sie dies mit \ dt tun können
Josh Brown
2
Vielen Dank, es funktioniert unter Amazon Redshift und \ dt (akzeptierte Antwort) nicht.
Carlos2W
2
Dies ist die allgemein nützlichste Antwort. information_schema ist in SQL-Standards definiert und in den meisten Datenbanken verfügbar, die den Anforderungen entsprechen
Davos,
53

Alternativ dazu information_schemaist möglich pg_tables:

select * from pg_tables where schemaname='public';
Radek Postołowicz
quelle
3
Beachten Sie, dass, wenn Sie nur möchten, dass der Tabellenname die resultierende Abfrage istSELECT tablename FROM pg_tables WHERE schemaname = 'public';
Grant Humphries
Es wurde ein Berechtigungsproblem gefunden, bei dem information_schemakeine Elemente aus dem publicSchema aufgelistet wurden, aber die pg_tablesMethode hat gut funktioniert. Danke vielmals!
John Crawford
8

Für diejenigen, die in Zukunft darauf stoßen:

Wenn Sie eine Liste der Beziehungen für mehrere Schemata anzeigen möchten:

$psql mydatabase
mydatabase=# SET search_path TO public, usa;   #schema examples
SET
mydatabase=# \dt
              List of relations
 Schema |      Name       | Type  |  Owner
--------+-----------------+-------+----------
 public | counties        | table | postgres
 public | spatial_ref_sys | table | postgres
 public | states          | table | postgres
 public | us_cities       | table | postgres
 usa    | census2010      | table | postgres
Blee
quelle