PostgreSQL "MENGGAMBARKAN TABEL"

Bagaimana anda melakukan setara dengan Oracle's `MENGGAMBARKAN TABEL di PostgreSQL (menggunakan perintah psql)?

Larutan

Coba ini (di psql command-line tool):

\d+ tablename

Lihat manual untuk info lebih lanjut.

Komentar (10)

Selain PostgreSQL cara (\d 'sesuatu' atau \dt 'table' atau \ds 'urutan' dan sebagainya)

SQL standar, seperti yang ditunjukkan di sini:

select column_name, data_type, character_maximum_length
from INFORMATION_SCHEMA.COLUMNS where table_name = '';

It's didukung oleh banyak db engine.

Komentar (12)

Jika anda ingin mendapatkan itu dari query bukan psql, anda dapat query katalog skema. Berikut ini's query kompleks yang artinya:

PILIH 
f.attnum SEBAGAI nomor, 
f.attname SEPERTI nama, 
f.attnum, 
f.attnotnull SEBAGAI notnull, 
pg_catalog.video bokep jepang(f.atttypid,f.atttypmod) SEBAGAI jenis, 
KASUS 
KETIKA p.contype = 'p' MAKA 't' 
LAIN 'f' 
END SEBAGAI primarykey, 
KASUS 
KETIKA p.contype = 'u' MAKA 't' 
LAIN 'f'
END SEBAGAI uniquekey,
KASUS
KETIKA p.contype = 'f' KEMUDIAN g.relname
END SEBAGAI foreignkey,
KASUS
KETIKA p.contype = 'f' MAKA p.confkey
END SEBAGAI foreignkey_fieldnum,
KASUS
KETIKA p.contype = 'f' KEMUDIAN g.relname
END SEBAGAI foreignkey,
KASUS
KETIKA p.contype = 'f' MAKA p.conkey
END SEBAGAI foreignkey_connnum,
KASUS
KETIKA f.atthasdef = 't' MAKA d.adsrc
END SEBAGAI default
DARI pg_attribute f 
BERGABUNG pg_class c PADA c.oid = f.attrelid 
BERGABUNG pg_type t PADA t.oid = f.atttypid 
KIRI BERGABUNG pg_attrdef d PADA d.adrelid = c.oid DAN d.adnum = f.attnum 
KIRI BERGABUNG pg_namespace n PADA n.oid = c.relnamespace 
KIRI BERGABUNG pg_constraint p PADA p.conrelid = c.oid DAN f.attnum = ADA (p.conkey) 
KIRI BERGABUNG pg_class SEBAGAI g p.confrelid = g.oid 
Di MANA c.relkind = 'r'::char 
DAN n.nspname = '%s' -- Ganti dengan nama Skema 
DAN c.relname = '%s' -- Ganti dengan nama tabel 
DAN f.attnum > 0 ORDER BY nomor
;

It's cukup kompleks tetapi tidak menunjukkan kekuatan dan fleksibilitas dari PostgreSQL sistem katalog dan harus mendapatkan anda di jalan untuk pg_catalog penguasaan ;-). Pastikan untuk mengganti %s's dalam query. Yang pertama adalah Skema dan yang kedua adalah nama tabel.

Komentar (3)

Anda dapat melakukannya dengan psql slash perintah:

 \d myTable describe table

Ia juga bekerja untuk benda-benda lain:

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

Sumber: faqs.org

Komentar (0)

Psql setara dengan JELASKAN MEJA adalah \d tabel.

Melihat psql sebagian dari PostgreSQL manual untuk rincian lebih lanjut.

Komentar (1)

Anda dapat melakukan \d *mencari pola * dengan tanda bintang untuk menemukan tabel yang sesuai dengan pola pencarian anda're tertarik pada.

Komentar (2)

Selain command line \d+ <table_name> anda sudah menemukan, anda juga bisa menggunakan informasi-skema untuk mencari kolom data, menggunakan info_schema.kolom

SELECT *
FROM info_schema.columns
WHERE table_schema = 'your_schema'
AND table_name   = 'your_table'
Komentar (1)

Ini harus menjadi solusi:

SELECT * FROM information_schema.columns
WHERE table_schema = 'your_schema'
   AND table_name   = 'your_table'
Komentar (0)

Anda dapat menggunakan ini :

SELECT attname 
FROM pg_attribute,pg_class 
WHERE attrelid=pg_class.oid 
AND relname='TableName' 
AND attstattarget 0; 
Komentar (1)

Gunakan pernyataan SQL berikut

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

Jika anda mengganti tbl_name dan y, ini akan menampilkan jenis data tertentu kolom yang anda cari.

Komentar (2)

Variasi ini query (seperti yang dijelaskan dalam jawaban lainnya) bekerja untuk saya.

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

It's yang dijelaskan di sini dalam rincian: http://www.postgresqltutorial.com/postgresql-describe-table/

Komentar (0)

Di MySQL , MENGGAMBARKAN table_name


Di PostgreSQL , \d table_name


Atau , anda dapat menggunakan ini selama perintah:

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
Komentar (0)

Untuk memperbaiki jawaban lain's SQL query (yang besar!), berikut ini adalah revisi dari query. Hal ini juga termasuk nama constraint, warisan informasi, dan jenis data dipecah menjadi it's bagian-bagian penyusunnya (tipe, panjang, presisi, skala). Hal ini juga menyaring kolom yang telah turun (yang masih ada dalam database).

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
;
Komentar (0)

Anda juga bisa memeriksa dengan menggunakan query di bawah ini

Select * from schema_name.table_name limit 0;

Expmple : tabel Saya memiliki 2 kolom nama dan pwd. Memberikan screenshot di bawah ini.

*Menggunakan PG admin3

Komentar (1)

Cara terbaik untuk menggambarkan sebuah tabel seperti kolom, jenis, pengubah kolom, dll.

\d+ tablename or \d tablename
Komentar (1)
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
Komentar (0)
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                        |
Komentar (1)

/dt adalah commad yang berisi daftar semua tabel yang ada dalam database. menggunakan /d perintah dan /d+ kita bisa mendapatkan rincian dari sebuah tabel. Yang sysntax akan menjadi seperti

  • /d table_name (atau) \d+ table_name
Komentar (1)

Saya bekerja di luar script berikut untuk mendapatkan skema tabel.

'CREATE TABLE ' || 'yourschema.yourtable' || E'\n(\n' ||
array_to_string(
array_agg(
'    ' || column_expr
)
, E',\n'
) || E'\n);\n'
from
(
SELECT '    ' || column_name || ' ' || data_type || 
coalesce('(' || character_maximum_length || ')', '') || 
case when is_nullable = 'YES' then ' NULL' else ' NOT NULL' end as column_expr
FROM information_schema.columns
WHERE table_schema || '.' || table_name = 'yourschema.yourtable'
ORDER BY ordinal_position
) column_list;
Komentar (1)