Wie liste ich alle Schemata in PostgreSQL auf?


239

Wie liste ich bei Verwendung von PostgreSQL v9.1 alle Schemas mit SQL auf?

Ich erwartete etwas in der Art von:

SELECT something FROM pg_blah;

Antworten:


259

Verwenden Sie den (ANSI-) Standard INFORMATION_SCHEMA, um alle Schemata aufzulisten

select schema_name
from information_schema.schemata;

Weitere Details im Handbuch

Alternative:

select nspname
from pg_catalog.pg_namespace;

Weitere Details zu pg_catalog finden Sie im Handbuch


250

Wenn Sie die psqlBefehlszeile verwenden, können Sie das gesamte Schema mit dem Befehl auflisten \dn.


Vielen Dank. Es wäre schön, wenn nur die Schemas von \ dn zurückgegeben würden. In diesem Fall schreibe ich jedoch eine Bootstrap-App, die über libpq / libpqxx eine Verbindung herstellt, sodass ich keinen CLI-Zugriff habe.
Stéphane

1
Was sind Schemata, die \dnauflisten, im Gegensatz zu Tabellen, die \dtauflisten?
Tommy

8
@Tommy \dtlistet Tabellen für das öffentliche Schema auf. Um Tabellen aller Schemata anzuzeigen, verwenden Sie \dt *.*und für ein bestimmtes Schema \dt schema_name.*.
Ernst

@Tommy, Schemas sind Namespaces: Sie können verschiedene Tabellen mit demselben Namen in verschiedenen Namespaces haben.
Eppesuig

38

Stellen Sie eine Verbindung zum Befehl psql her -> psql --u {userName} {DBName}, und geben Sie den folgenden Befehl ein, um zu überprüfen, wie viele Schemas in der Datenbank vorhanden sind

DBName=# \dn

Andernfalls können Sie die Syntax anhand der folgenden Schritte leicht überprüfen:

  1. Drücken Sie nach dem Anschließen der DB

    DBName=# help

Sie erhalten die folgenden Optionen:

Sie verwenden psql, die Befehlszeilenschnittstelle zu PostgreSQL.
Geben Sie Folgendes ein: \ copyright for distribution terms
\ h, um Hilfe bei SQL-Befehlen zu erhalten
\? Für Hilfe bei psql-Befehlen
\ g oder mit Semikolon beenden, um die Abfrage auszuführen
\ q zum Beenden

Dann drücken

DBName=# \?

Sie erhalten alle Optionen sehr einfach.


9

Ab postgres 9.3 können Sie in postgres einen Trick anwenden, um den genauen SQL-Wert des Informationsbefehls (z. B. \ d, \ du, \ dp usw.) in psql mithilfe einer Transaktion abzurufen. Hier ist, wie der Trick geht. Öffnen Sie eine Postgres-Sitzung und geben Sie Ihren Befehl ein:

begin;
\dn+

Öffnen Sie während der Ausführung der Transaktion eine weitere postgres-Sitzung, und fragen Sie pg_stat_activity ab. Sie können dann die genaue SQL abrufen.

postgres=# select query from pg_stat_activity ;
                                 query                                 
-----------------------------------------------------------------------
 SELECT n.nspname AS "Name",                                          +
   pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner",                 +
   pg_catalog.array_to_string(n.nspacl, E'\n') AS "Access privileges",+
   pg_catalog.obj_description(n.oid, 'pg_namespace') AS "Description" +
 FROM pg_catalog.pg_namespace n                                       +
 WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'      +
 ORDER BY 1;

12
Du musst es nicht austricksen; einfach laufen\set ECHO_HIDDEN on
Nick Barnes

8
oder starte es alspsql -E
Evan Carroll
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.