sqlite3 CLI有一个命令.schema
,它将显示数据库中所有表的列。
PostgreSQL的psql CLI有一个元命令\d
,显示所有"关系"的列。 (表,视图,索引,序列或外表)和元命令\dt
,它列出了表的关系,但没有显示这些表的列。
有没有办法让psql
显示输出,例如sqlite3' s .schema
- 只显示\d
关于表格关系的输出? \d *
显示所有关系的列,在我的32个表的数据库中包含63个表和序列。模式(此示例中为*
)似乎能够匹配关系名称而不是关系类型。是否存在"匹配所有表格的模式"?
答案 0 :(得分:1)
如果您想要输出:
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
元命令相同的表格。
BTW我从这个metacommand接受了查询。如果您启动psql -E
并运行'\ d table_name`,您将看到所有元命令都只是选择查询的包装...