是否有psql命令来显示表定义?

时间:2016-03-24 16:33:44

标签: postgresql psql

sqlite3 CLI有一个命令.schema,它将显示数据库中所有表的列。

PostgreSQL的psql CLI有一个元命令\d,显示所有"关系"的列。 (表,视图,索引,序列或外表)和元命令\dt,它列出了表的关系,但没有显示这些表的列。

有没有办法让psql显示输出,例如sqlite3' s .schema - 只显示\d关于表格关系的输出? \d *显示所有关系的列,在我的32个表的数据库中包含63个表和序列。模式(此示例中为*)似乎能够匹配关系名称而不是关系类型。是否存在"匹配所有表格的模式"?

1 个答案:

答案 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`,您将看到所有元命令都只是选择查询的包装...