it-swarm.com.de

PostgreSQL "TABELLE BESCHREIBEN"

Wie führen Sie das Äquivalent von Oracle DESCRIBE TABLE in PostgreSQL durch (mit dem Befehl psql)?

1746
Mr. Muskrat

Versuchen Sie Folgendes (im Befehlszeilentool psql):

\d+ tablename

Siehe das Handbuch für weitere Informationen.

2675
Chris Bunch

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

Die SQL-Standardmethode, wie gezeigt hier :

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

Es wird von vielen DB-Engines unterstützt.

691
Vinko Vrsalovic

Wenn Sie es von query anstelle von psql erhalten möchten, können Sie das Katalogschema abfragen. Hier ist eine komplexe Abfrage, die das macht:

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 Schema und das zweite ist der Tabellenname.

66
Gavin M. Roy

Sie können das mit einem psql-Schrägstrich machen:

 \d myTable describe table

Es funktioniert auch für andere Objekte:

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

Quelle: faqs.org

48
devinmoore

Das psql-Äquivalent von DESCRIBE TABLE ist \d table.

Weitere Informationen finden Sie im Abschnitt psql des PostgreSQL-Handbuchs.

35
Mr. Muskrat

Sie können einen \d *search pattern *mit Sternchen ausführen, um Tabellen zu finden, die dem Suchmuster entsprechen, an dem Sie interessiert sind.

21
Ryan

Zusätzlich zu der bereits gefundenen Befehlszeile \d+ <table_name> können Sie auch das Informationsschema verwenden, um die Spaltendaten mit info_schema.columns nachzuschlagen

SELECT *
FROM info_schema.columns
WHERE table_schema = 'your_schema'
AND table_name   = 'your_table'
15
Mushahid Khan

Sie können dies verwenden:

SELECT attname 
FROM pg_attribute,pg_class 
WHERE attrelid=pg_class.oid 
AND relname='TableName' 
AND attstattarget <>0; 
13
YATK

Dies sollte die Lösung sein:

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

Verwenden Sie die folgende SQL-Anweisung

SELECT DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE table_name = 'tbl_name' 
AND COLUMN_NAME = 'col_name'

Wenn Sie tbl_name und col_name ersetzen, wird der Datentyp der bestimmten Spalte angezeigt, nach der Sie suchen.

12
Mr.Tananki

Diese Variante der Abfrage (wie in anderen Antworten erläutert) hat bei mir funktioniert.

SELECT
 COLUMN_NAME
FROM
 information_schema.COLUMNS
WHERE
 TABLE_NAME = 'city';

Es wird hier ausführlich beschrieben: http://www.postgresqltutorial.com/postgresql-describe-table/

7
codeUrDream

In MySQL DESCRIBE table_name


In PostgreSQL,\d Tabellenname


Oder Sie können diesen langen Befehl verwenden:

SELECT
        a.attname AS Field,
        t.typname || '(' || a.atttypmod || ')' AS Type,
        CASE WHEN a.attnotnull = 't' THEN 'YES' ELSE 'NO' END AS Null,
        CASE WHEN r.contype = 'p' THEN 'PRI' ELSE '' END AS Key,
        (SELECT substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid), '\'(.*)\'')
                FROM
                        pg_catalog.pg_attrdef d
                WHERE
                        d.adrelid = a.attrelid
                        AND d.adnum = a.attnum
                        AND a.atthasdef) AS Default,
        '' as Extras
FROM
        pg_class c 
        JOIN pg_attribute a ON a.attrelid = c.oid
        JOIN pg_type t ON a.atttypid = t.oid
        LEFT JOIN pg_catalog.pg_constraint r ON c.oid = r.conrelid 
                AND r.conname = a.attname
WHERE
        c.relname = 'tablename'
        AND a.attnum > 0

ORDER BY a.attnum
6
MisterJoyson

Um die SQL-Abfrage der anderen Antwort zu verbessern (was großartig ist!), Ist hier eine überarbeitete Abfrage. Es enthält auch Einschränkungsnamen, Vererbungsinformationen und Datentypen, die in ihre Bestandteile unterteilt sind (Typ, Länge, Genauigkeit, Skalierung). Außerdem werden gelöschte Spalten herausgefiltert (die noch in der Datenbank vorhanden sind).

SELECT
    n.nspname as schema,
    c.relname as table,
    f.attname as column,  
    f.attnum as column_id,  
    f.attnotnull as not_null,
    f.attislocal not_inherited,
    f.attinhcount inheritance_count,
    pg_catalog.format_type(f.atttypid,f.atttypmod) AS data_type_full,
    t.typname AS data_type_name,
    CASE  
        WHEN f.atttypmod >= 0 AND t.typname <> 'numeric'THEN (f.atttypmod - 4) --first 4 bytes are for storing actual length of data
    END AS data_type_length, 
    CASE  
        WHEN t.typname = 'numeric' THEN (((f.atttypmod - 4) >> 16) & 65535)
    END AS numeric_precision,   
    CASE  
        WHEN t.typname = 'numeric' THEN ((f.atttypmod - 4)& 65535 )
    END AS numeric_scale,       
    CASE  
        WHEN p.contype = 'p' THEN 't'  
        ELSE 'f'  
    END AS is_primary_key,  
    CASE
        WHEN p.contype = 'p' THEN p.conname
    END AS primary_key_name,
    CASE  
        WHEN p.contype = 'u' THEN 't'  
        ELSE 'f'
    END AS is_unique_key,
    CASE
        WHEN p.contype = 'u' THEN p.conname
    END AS unique_key_name,
    CASE
        WHEN p.contype = 'f' THEN 't'
        ELSE 'f'
    END AS is_foreign_key,
    CASE
        WHEN p.contype = 'f' THEN p.conname
    END AS foreignkey_name,
    CASE
        WHEN p.contype = 'f' THEN p.confkey
    END AS foreign_key_columnid,
    CASE
        WHEN p.contype = 'f' THEN g.relname
    END AS foreign_key_table,
    CASE
        WHEN p.contype = 'f' THEN p.conkey
    END AS foreign_key_local_column_id,
    CASE
        WHEN f.atthasdef = 't' THEN d.adsrc
    END AS default_value
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 f.attisdropped = false
    AND n.nspname = '%s'  -- Replace with Schema name  
    AND c.relname = '%s'  -- Replace with table name  
    AND f.attnum > 0 
ORDER BY f.attnum
;
5
Howard Elton

Sie können dies auch mit der folgenden Abfrage überprüfen

Select * from schema_name.table_name limit 0;

Beispiel: Meine Tabelle hat 2 Spalten Name und PWD. Screenshot unten.

Adding image

* Mit PG admin3

3
Riya Bansal

Die beste Art, eine Tabelle wie eine Spalte, einen Typ, Modifikatoren von Spalten usw. zu beschreiben.

\d+ tablename or \d tablename
2
Guardian
In postgres \d is used to describe the table structure.
e.g. \d schema_name.table_name;
this command will provide you the basic info of table such as, columns, type and modifiers.

If you want more info about table use
\d+ schema_name.table_name;
this will give you extra info such as, storage, stats target and description
1
meenal
Use this command 

\d table name

like 

\d queuerecords

             Table "public.queuerecords"
  Column   |            Type             | Modifiers
-----------+-----------------------------+-----------
 id        | uuid                        | not null
 endtime   | timestamp without time zone |
 payload   | text                        |
 queueid   | text                        |
 starttime | timestamp without time zone |
 status    | text                        |
1
Usman Yaqoob