DESCRIBE TABLE
PostgreSQL'de Oracle'ın eşdeğerini (psql komutunu kullanarak) nasıl gerçekleştirirsiniz?
DESCRIBE TABLE
PostgreSQL'de Oracle'ın eşdeğerini (psql komutunu kullanarak) nasıl gerçekleştirirsiniz?
Yanıtlar:
+
Bunu yaptığında sadece görünümler için derinlemesine açıklama verir PostgresSQL 9 olarak, gerçekten debriyaj \d+ table_name
ziyade basit daha\d table_name
psql -E
\d+
ve benzeri (sqql istemi dışında kullanım için) sql almak için kullanışlıdır
PostgreSQL yoluna ek olarak (\ d 'bir şey' veya \ dt 'tablo' veya \ ds 'dizisi' vb.)
Burada gösterildiği gibi SQL standart yolu :
select column_name, data_type, character_maximum_length
from INFORMATION_SCHEMA.COLUMNS where table_name = '<name of table>';
Birçok db motoru tarafından desteklenir.
\d+
çalışmaz. Bu en iyi cevap IMO
Psql yerine sorgudan almak istiyorsanız, katalog şemasını sorgulayabilirsiniz. İşte bunu yapan karmaşık bir sorgu:
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
;
Oldukça karmaşık ama size PostgreSQL sistem kataloğunun gücünü ve esnekliğini gösteriyor ve pg_catalog üstatlığı ;-) yolunda gitmeli. Sorgudaki% s değerlerini değiştirdiğinizden emin olun. Birincisi Şema ve ikincisi tablo adıdır.
format_type()
, tipe bağlı herhangi bir değiştiriciyi, örneğin numeric(6,2)
; oysa information_schema.columns
sadece taban türünü bildirecektir numeric
.
Bunu bir psql eğik çizgi komutuyla yapabilirsiniz:
\d myTable describe table
Ayrıca diğer nesneler için de çalışır:
\d myView describe view
\d myIndex describe index
\d mySequence describe sequence
Kaynak: faqs.org
Arasında psql'in eşdeğer DESCRIBE TABLE
IS\d table
.
Daha fazla ayrıntı için PostgreSQL kılavuzunun psql bölümüne bakın.
\c databasename
yerine use databasename
benim gibi MySQL gelenler için :-). \c databasename
İlk olmadan mesaj \d tablename
üretir No relations found.
ve başka bir şey yapmaz.
İlgilendiğiniz arama modeliyle eşleşen tabloları bulmak \d *search pattern *
için yıldız işaretli bir yapabilirsiniz .
\d *"<SubString>"*
. Yani, çift tırnaklar yıldızların içinde olmalıdır . Yine de, sadece tablo listesini istiyorsanız o zaman kullanmak istiyorsunuz\dt
Bulduğunuz komut satırına ek olarak, info_schema.columns komutunu kullanarak sütun verilerini aramak \d+ <table_name>
için bilgi şemasını da kullanabilirsiniz.
SELECT *
FROM info_schema.columns
WHERE table_schema = 'your_schema'
AND table_name = 'your_table'
FROM info_schema.columns
benim için işe yaramadı kullanmak zorundaydım from information_schema.columns
, cevabında bir yazım hatası ya da sonunda bazı uygulama sorunu olup olmadığından emin değilim.
Aşağıdaki SQL deyimini kullanın
SELECT DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'tbl_name'
AND COLUMN_NAME = 'col_name'
Tbl_name ve col_name öğelerini değiştirirseniz, aradığınız belirli bir sütunun veri türünü görüntüler.
Sorgunun bu varyasyonu (diğer cevaplarda açıklandığı gibi) benim için çalıştı.
SELECT
COLUMN_NAME
FROM
information_schema.COLUMNS
WHERE
TABLE_NAME = 'city';
Burada ayrıntılı olarak açıklanmaktadır: http://www.postgresqltutorial.com/postgresql-describe-table/
In MySQL , tablo_adı DESCRIBE
Gelen PostgreSQL , \ d table_name
Veya bu uzun komutu kullanabilirsiniz:
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
Diğer cevabın SQL sorgusunda (ki bu harika!) Geliştirmek için, burada düzeltilmiş bir sorgu var. Ayrıca, kısıtlama adları, kalıtım bilgileri ve bileşen parçalarına (tip, uzunluk, kesinlik, ölçek) ayrılmış veri türlerini de içerir. Ayrıca bırakılan (hala veritabanında bulunan) sütunları filtreler.
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
;
Aşağıdaki sorguyu kullanarak da kontrol edebilirsiniz
Select * from schema_name.table_name limit 0;
Expmple: Masamın 2 sütun adı ve pwd'si var. Aşağıdaki ekran görüntüsünü veriyoruz.
* PG admin3 kullanma
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 |
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) psql kullanarak PostgreSQL AÇIKLAMA TABLOSU
Psql komut satırı aracında, tablonun sütunları hakkındaki bilgileri bulmak için \ d tablo_adı veya \ d + tablo_adı
2) Bilgi_semalarını kullanarak PostgreSQL AÇIKLAMA TABLOSU
İnformation_schema veritabanındaki sütunlar tablosunun sütun_adı, veri türü, karakter maksimum uzunluğunu sorgulamak için SELECT ifadesi;
BİLGİ_SCHEMA.COLUMNS arasından COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH değerlerini seçin; burada table_name = 'tablename';
Daha fazla bilgi için https://www.postgresqltutorial.com/postgresql-describe-table/
/ dt, bir veritabanında bulunan tüm tabloları listeleyen bir yazılımdır. kullanarak
/ d komutunu ve / d biz bir tablo ayrıntıları alabilirsiniz +. Sysntax
* / d tablo_adı (veya) \ d + tablo_adı şeklinde olacaktır.
Tablo şemasını almak için aşağıdaki komut dosyasını çalıştım.
'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;