2010-12-02 4 views

Antwort

6

Sie können vollständig unter Verwendung einer Tabelle Postgres mit der folgenden Abfrage beschreiben.

Es ist auch möglich psql Client mit der -E Option

$ psql -E 

und dann einem einfachen \d mytable ausgeben wird die Abfragen von Postgres zum Starten der Tabelle zu beschreiben. Es funktioniert für jeden psql beschreiben Befehle.

+0

Ausgezeichnete Antwort! Ich stieß jedoch auf ein anderes Problem: http://stackoverflow.com/questions/4336465/using-query-to-set-the-column-type-in-postgresql – David

+2

Ich glaube nicht, dass Sie diese Regex-Übereinstimmung brauchen, ' c.relname ~ '^ (TABLENAME) $' 'entspricht" c.relname = 'TABLENAME' ". Schöne Antwort. –

+0

@mu Du hast recht, aber ich denke er hat es einfach kopiert von etwas mit Regex-Unterstützung :) –

2

Ja, schauen Sie sich die information_schema.

SELECT 
    a.attname as Column, 
    pg_catalog.format_type(a.atttypid, a.atttypmod) as Datatype 
    FROM 
    pg_catalog.pg_attribute a 
    WHERE 
    a.attnum > 0 
    AND NOT a.attisdropped 
    AND a.attrelid = (
    SELECT c.oid 
    FROM pg_catalog.pg_class c 
    LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace 
    WHERE c.relname ~ '^(TABLENAME)$' 
    AND pg_catalog.pg_table_is_visible(c.oid) 
) 

Tith diese Spaltennamen und Datentyp abruft:

10

Es gibt eine viel einfachere Weg in PostgreSQL, um den Typ einer Spalte zu erhalten.

SELECT pg_typeof(col)::text FROM tbl LIMIT 1 

Die Tabelle muss mindestens eine Reihe, natürlich halten. Und Sie erhalten nur den Basistyp ohne Typmodifikatoren (falls vorhanden). Verwenden Sie die Alternative unten, wenn Sie das auch brauchen.
Sie können die Funktion auch für Konstanten verwenden. Die manual on pg_typeof().

Für einen leeren (oder jede) Tabelle Sie pg_attribute den Systemkatalog abfragen können die vollständige Liste der Spalten und deren jeweilige Art, um zu erhalten:

SELECT attnum, attname AS column, format_type(atttypid, atttypmod) AS type 
FROM pg_attribute 
WHERE attrelid = 'myschema.mytbl'::regclass -- optionally schema-qualified 
AND NOT attisdropped 
AND attnum > 0 
ORDER BY attnum; 

Das Handbuch auf format_type() und auf object identifier types wie regclass .

+0

Suche nach "format_type (attypid, atttypmod)" für eine Weile, als es scheint, dass das gleiche wie information_schema.columns. udt_name (oder ähnlich und das ist vollkommen in Ordnung für meinen Fall). Vielen Dank :). – Dolfa

Verwandte Themen