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?

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 .


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'

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';

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.