2014-01-29 24 views
9

Frage gestellt und beantwortet:Äquivalent von „beschreiben Tabelle“ in pgAdmin3

Wie viele von uns wissen, PostgreSQL nicht describe table oder describe view unterstützt. Wie man bei google finden kann, verwendet PostgreSQL stattdessen \d+.

Wenn jedoch auf PostgreSQL mit PgAdmin (ich verwende PgAdmin3) zugegriffen wird, funktioniert \d+ nicht. Was macht man stattdessen?

Ich dachte über diese Frage beim Spielen mit dem Abfrage-Tool in PgAdmin3 nach. Ich hatte ein "gut, duh!" Moment, als ich dachte, ich schaue auf das Fenster von PgAdmin3 und auf den Baum auf der linken Seite des Fensters. Unter

<servername> 
-> <databasename> 
-> Schemas 
-> <schemaname> 
-> Tables 

war eine Liste meiner Tabellen, und Namen auf dem Tisch klicken zeigte mir Text sehr ähnlich, was \d+ würde mir gezeigt haben.

Also zum Vorteil von jemand anderen, der dies nicht sofort entdeckt hat, hier ist eine Antwort.

+0

Streng, 'psql' verwendet' \ dt'; PostgreSQL das Server-Backend nicht, obwohl es die 'information_schema'-Ansichten bietet. –

Antwort

16

PostgreSQL unterstützt auch das Standard-SQL-Informationsschema, um Details von Objekten in der Datenbank abzurufen.

heißt Spalteninformationen erhalten Sie die information_schema.columns Ansicht abfragen können:

SELECT * 
FROM information_schema.columns 
WHERE table_name = '????'; 

prüfen here für PostgreSQL spezifische Details über das Informationsschema.

1

Der Befehl psql's \ d sendet eine Reihe von Abfragen an die Datenbank, um das Schema abzufragen, und druckt dann das Ergebnis aus.

Sie können die Option '-E' psql verwenden, um diese Abfragen anzuzeigen, wenn Sie ähnliche Informationen direkt über SQL extrahieren möchten.

Abgesehen davon verwendet psql die internen Postgresql-Katalogtabellen anstelle des standardisierten 'information_schema'-Schemas (siehe Antwort von Garethflowers). Wenn Sie also auf Portabilität Wert legen oder sogar garantieren, dass es von einer Version zur nächsten weiter funktioniert, sollten Sie wahrscheinlich information_schema verwenden.

0

und die gerade von der bash:

psql -d "$db_name" -c ' 
    SELECT 
    ordinal_position , table_name , column_name , data_type , is_nullable 
    FROM information_schema.columns 
    WHERE 1=1 
    AND table_name = '\''my_table'\'' 
    ;' 

    # or just the col names 
    psql -d "$my_db" -t -c \ 
    "SELECT column_name FROM information_schema.columns 
    WHERE 1=1 AND table_name='my_table'"