Bagaimana anda melakukan setara dengan Oracle's `MENGGAMBARKAN TABEL di PostgreSQL (menggunakan perintah psql)?
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 = '<name of table>';
It's didukung oleh banyak db engine.
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.
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'
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.
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/
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
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
;
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
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
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 |
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;