sqlite3 CLI有一个命令.schema,它将显示数据库中所有表的列。
用于PostgreSQL的psql CLI有一个元命令\d和一个元命令\dt,前者显示所有“关系”(表、视图、索引、序列或外部表)的列,后者列出表中的关系,但不显示这些表中的列。
有没有办法让psql像sqlite3的.schema那样显示输出?\d只显示关系表的输出?\d *显示所有关系的列,在我的32个表的数据库中,它包含63个表和序列。模式(本例中为*)似乎能够匹配关系名称,但不能匹配关系类型。是否有“匹配所有表”的模式?
发布于 2016-11-29 17:59:12
如果你想要这样的输出:
sqlite> .schema t24
CREATE TABLE t24 (
i integer,
t text
);您应该使用pg_dump -s,而不是psql
bash>pg_dump -t t24 -s
CREATE TABLE t24 (
i integer,
t text
);它创建了DDL,就像.schema一样...
现在关于注释中的查询,如果您稍微修改它们:
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)此查询将以与\d元命令相同的方式仅显示表。
顺便说一句,我从这个元命令中获取了查询。如果您启动psql -E并运行'\d table_name`,您将看到所有元命令都只是select查询的包装...
https://stackoverflow.com/questions/36205342
复制相似问题