Listen Sie alle Tabellen in postgresql information_schema auf

199

Was ist der beste Weg, um alle Tabellen im Informationsschema von PostgreSQL aufzulisten?

Zur Verdeutlichung: Ich arbeite mit einer leeren Datenbank (ich habe keine meiner eigenen Tabellen hinzugefügt), möchte aber jede Tabelle in der Struktur information_schema sehen.

littleK
quelle

Antworten:

275

Sie sollten in der Lage sein, nur select * from information_schema.tableseine Liste aller von Postgres verwalteten Tabellen für eine bestimmte Datenbank abzurufen.

Sie können auch ein hinzufügen where table_schema = 'information_schema', um nur die Tabellen im Informationsschema anzuzeigen.

RodeoClown
quelle
4
Danke, ich habe gerade versucht: / dt (Sternchen). (Sternchen) ist das anders?
littleK
Ich weiß nichts über die Sache / dt (Sternchen). (Sternchen), sorry. Ich habe gerade die Auswahlabfrage in postgres ausgeführt und sie listete Informationen zu allen darin enthaltenen Tabellen auf. Versuchen Sie, die select-Anweisung (auf Ihrer leeren Datenbank) auszuführen, und sehen Sie, was sie zurückgibt.
RodeoClown
Wenn Sie den obigen Befehl versuchen, werden die folgenden Tabellen in information_schema aufgelistet: sql_features, sql_implementation_info, sql_languages, sql_packages, sql_parts, sql_sizing, sql_sizing_profiles ..... Was ist also der Unterschied zwischen diesen Tabellen und denen in information_schema.tables?
littleK
2
Alle von Ihnen aufgelisteten Tabellen (über den Befehl / dt) enthalten Metainformationen zur Datenbank. Jede der aufgelisteten Tabellen enthält unterschiedliche Informationen. So listet die Tabelle information_schema.tables beispielsweise alle Tabellen in der Datenbank und ihre Attribute auf (z. B. um zu sehen, ob es sich um eine Tabelle oder eine Ansicht handelt, wie der Name lautet und andere Informationen wie diese). In der Tabelle information_schema.sql_features wird angezeigt, welche Funktionen in der Datenbank aktiviert sind (sodass ich sehen kann, dass Embedded C in meiner Datenbank sowie direktes SQL unterstützt wird).
RodeoClown
1
Sie können für jede der mit dem Befehl dt aufgelisteten Tabellen ein select * ausführen. Es wurde Ihnen gerade eine Liste von Tabellen angezeigt, die Metadaten in der Datenbank enthalten.
RodeoClown
112

Verwenden Sie zum Auflisten Ihrer Tabellen:

SELECT table_name FROM information_schema.tables WHERE table_schema='public'

Es werden nur Tabellen aufgelistet, die Sie erstellen.

phsaires
quelle
Wie wäre es mit Tabellen, die Sie nicht erstellen, für die Sie jedoch Zugriffsberechtigung haben?
Huy
4
Dadurch werden nur Tabellen im öffentlichen Schema angezeigt. Sie können Tabellen in anderen Schemas erstellen.
Joe Van Dyk
Auch dies wird nicht zwischen Tabellen und Ansichten unterscheiden.
Jayarjo
44
\dt information_schema.

aus psql heraus sollte in Ordnung sein.


quelle
14

Der Befehl "\ z" ist auch eine gute Möglichkeit, Tabellen in der interaktiven psql-Sitzung aufzulisten.

z.B.

# psql -d mcdb -U admin -p 5555
mcdb=# /z
                           Access privileges for database "mcdb"
 Schema |              Name              |   Type   |           Access privileges
--------+--------------------------------+----------+---------------------------------------
 public | activities                     | table    |
 public | activities_id_seq              | sequence |
 public | activities_users_mapping       | table    |
[..]
 public | v_schedules_2                  | view     | {admin=arwdxt/admin,viewuser=r/admin}
 public | v_systems                      | view     |
 public | vapp_backups                   | table    |
 public | vm_client                      | table    |
 public | vm_datastore                   | table    |
 public | vmentity_hle_map               | table    |
(148 rows)
Chris Schuhschmied
quelle
1
Dies listet keine Tabellen in anderen Schemata als public auf .
Kenny Evitt
10

Sie können auch verwenden

select * from pg_tables where schemaname = 'information_schema'

In allgemeinen pg * -Tabellen können Sie alles in der Datenbank anzeigen, ohne auf Ihre Berechtigungen beschränkt zu sein (wenn Sie natürlich Zugriff auf die Tabellen haben).

Timofey
quelle
9

Für ein privates Schema 'xxx'in postgresql:

SELECT table_name FROM information_schema.tables 
 WHERE table_schema = 'xxx' AND table_type = 'BASE TABLE'

Ohne table_type = 'BASE TABLE'werden Sie Tabellen und Ansichten auflisten

germanlinux
quelle
8

1. Holen Sie sich alle Tabellen und Ansichten aus information_schema.tables, einschließlich der von information_schema und pg_catalog.

select * from information_schema.tables

2.get Tabellen und Ansichten gehören zu bestimmten Schema

select * from information_schema.tables
    where table_schema not in ('information_schema', 'pg_catalog')

3.get Tabellen nur (fast \ dt)

select * from information_schema.tables
    where table_schema not in ('information_schema', 'pg_catalog') and
    table_type = 'BASE TABLE'
hzh
quelle
Wenn Sie nicht nach table_type filtern, werden alle Arten von Objekten wie Tabellen und Ansichten verwechselt.
Russellhoff
Wofür genau where table_schema not in ('information_schema', 'pg_catalog')ist?
Jayarjo
1

Wenn Sie eine schnelle und schmutzige Einzeiler-Abfrage wünschen:

select * from information_schema.tables

Sie können es direkt im Abfrage-Tool ausführen, ohne psql öffnen zu müssen.

(Andere Beiträge schlagen nette, spezifischere Abfragen zu information_schema vor, aber als Neuzugang finde ich, dass diese einzeilige Abfrage mir hilft, die Tabelle in den Griff zu bekommen.)

Sally Levesque
quelle