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.

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.


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.


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.


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)

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).


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


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'

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.)

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.