2016-03-24 27 views
1

sqlite3 CLI, veritabanındaki tüm tabloların sütunlarını görüntüleyen .schema komutuna sahiptir.Tablo tanımlarını göstermek için bir psql komutu var mı?

PostgreSQL psql CLI tüm "bağıntılar" için sütunlar gösteren bir meta komutları \d sahiptir (tablo, görünüm, dizin sekansı veya yabancı tablo) ve bir meta-komut \dt tablolardır ilişkileri listeleyen ancak bu tabloların sütunlarını göstermez.

Sqlite3 en .schema gibi çıktı göstermek için psql almanın bir yolu var mı - tablolar sadece ilişkilerine \d çıktısını göstermek? \d *, 32 tablolar veritabanımda 63 tablo ve dizi içeren tüm ilişkilerin sütunlarını gösterir. Desen (bu örnekte *) ilişki adıyla değil, ilişki türü ile eşleşebilir. "Tüm tabloları eşleştir" için bir desen var mı? Eğer böyle çıktı istiyorsanız

+0

'select * from info_schema.columns Burada table_schema = 'public';' – Abelisto

+0

Bu komut aslında bir şey döndürür, ancak ham haliyle çok kullanışlı değildir. Sütun 34 ile 4 arasındaki birşeyi düzeltmenin bir yolu var. İlgilendiğim: table_name, column_name, data_type, character_maximum_length? Diğer 30 sütunları umursamıyorum, örneğin, collation_name, domain_catalog, domain_schema, udt_catalog, ... maximum_cardinaltiy, dtd_identifier, is_self_referencing, ... identity_start, identity_increment, identity_maximum, ... resmi alırsınız. – Dave

+0

Açıkçası evet, diğer SQL sorgularında olduğu gibi: 'select table_name, column_name, data_type, character_maximum_length from ...'. – Abelisto

cevap

0

:

sqlite> .schema t24 
CREATE TABLE t24 (
    i integer, 
    t text 
); 

Sen pg_dump -s değil psql kullanmalıdır:

bash>pg_dump -t t24 -s 
CREATE TABLE t24 (
    i integer, 
    t text 
); 

Sadece .schema gibi DDL oluşturulan ...

Şimdi sorguları ilgili Yorumlarda, biraz değiştirirseniz:

t=# \d t24 
     Table "public.t24" 
Column | Type | Modifiers 
--------+---------+----------- 
i  | integer | 
t  | text | 

t=# SELECT a.attname as "Column",pg_catalog.format_type(a.atttypid, a.atttypmod) as "Type", 
    (SELECT substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid) for 128) 
    FROM pg_catalog.pg_attrdef d 
    WHERE d.adrelid = a.attrelid AND d.adnum = a.attnum AND a.atthasdef) as "Modifiers" 
FROM pg_catalog.pg_attribute a 
join pg_catalog.pg_class c on a.attrelid = c.oid 
WHERE true 
    AND relname like 't24' 
    AND c.relkind = 'r'::"char" 
    AND a.attnum > 0 AND NOT a.attisdropped 
ORDER BY relname, a.attnum; 
Column | Type | Modifiers 
--------+---------+----------- 
i  | integer | 
t  | text | 
(2 rows) 

Bu sorgu, yalnızca tabloları \d meta-komutu ile aynı şekilde gösterecektir.

BTW Sorguyu bu metacommand'dan aldım. psql -E'u başlatırsanız ve '\ d table_name' işlevini çalıştırırsanız, tüm meta komutlarının yalnızca seçili sorgular için tamamlandığını görürsünüz ...