2179 Stimmen

PostgreSQL "DESCRIBE TABLE"

Wie führen Sie das Äquivalent zu Oracles DESCRIBE TABLE in PostgreSQL (mit dem Befehl psql)?

3173voto

Chris Bunch Punkte 83897

Versuchen Sie dies (in der psql Befehlszeilentool):

\d+ tablename

Voir das Handbuch für weitere Informationen.

927voto

Vinko Vrsalovic Punkte 252104

Zusätzlich zum PostgreSQL-Weg ( \d etwas" oder \dt Tabelle" oder \ds Sequenz' und so weiter)

Die SQL-Standardmethode, wie gezeigt ici :

select column_name, data_type, character_maximum_length, column_default, is_nullable
from INFORMATION_SCHEMA.COLUMNS where table_name = '<name of table>';

Es wird von vielen DB-Maschinen unterstützt.

80voto

Gavin M. Roy Punkte 4274

Wenn Sie sie nicht mit psql, sondern mit query erhalten möchten, können Sie das Katalogschema abfragen. Hier ist eine komplexe Abfrage, die das tut:

SELECT  
    f.attnum AS number,  
    f.attname AS name,  
    f.attnum,  
    f.attnotnull AS notnull,  
    pg_catalog.format_type(f.atttypid,f.atttypmod) AS type,  
    CASE  
        WHEN p.contype = 'p' THEN 't'  
        ELSE 'f'  
    END AS primarykey,  
    CASE  
        WHEN p.contype = 'u' THEN 't'  
        ELSE 'f'
    END AS uniquekey,
    CASE
        WHEN p.contype = 'f' THEN g.relname
    END AS foreignkey,
    CASE
        WHEN p.contype = 'f' THEN p.confkey
    END AS foreignkey_fieldnum,
    CASE
        WHEN p.contype = 'f' THEN g.relname
    END AS foreignkey,
    CASE
        WHEN p.contype = 'f' THEN p.conkey
    END AS foreignkey_connnum,
    CASE
        WHEN f.atthasdef = 't' THEN d.adsrc
    END AS default
FROM pg_attribute f  
    JOIN pg_class c ON c.oid = f.attrelid  
    JOIN pg_type t ON t.oid = f.atttypid  
    LEFT JOIN pg_attrdef d ON d.adrelid = c.oid AND d.adnum = f.attnum  
    LEFT JOIN pg_namespace n ON n.oid = c.relnamespace  
    LEFT JOIN pg_constraint p ON p.conrelid = c.oid AND f.attnum = ANY (p.conkey)  
    LEFT JOIN pg_class AS g ON p.confrelid = g.oid  
WHERE c.relkind = 'r'::char  
    AND n.nspname = '%s'  -- Replace with Schema name  
    AND c.relname = '%s'  -- Replace with table name  
    AND f.attnum > 0 ORDER BY number
;

Es ist ziemlich komplex, aber es zeigt Ihnen die Leistungsfähigkeit und Flexibilität des PostgreSQL-Systemkatalogs und sollte Sie auf den Weg zur pg_catalog-Meisterschaft bringen ;-). Achten Sie darauf, die %s in der Abfrage zu ändern. Das erste ist das Schema und das zweite ist der Tabellenname.

68voto

devinmoore Punkte 2691

Sie können dies mit dem Befehl psql slash tun:

 \d myTable describe table

Es funktioniert auch für andere Objekte:

 \d myView describe view
 \d myIndex describe index
 \d mySequence describe sequence

Fuente: faqs.org

52voto

LeYAUable Punkte 1038

Dies sollte die Lösung sein:

SELECT * FROM information_schema.columns
WHERE table_schema = 'your_schema'
   AND table_name   = 'your_table'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X