postgresql 在psql中使用\d命令的结果

rkkpypqq  于 2023-01-30  发布在  PostgreSQL
关注(0)|答案(2)|浏览(339)

psql中的命令\d列出了所有的表、视图和序列。是否有办法将此输出捕获到表中并对其运行查询?

mydb-> \d

      List of relations
Schema |  Name  | Type  |   Owner
-------+--------+-------+---------
public | mytab1 | table | username

mydb-> select * from <use relation from \d> where Type='view';

      List of relations
Schema |  Name  | Type  |   Owner
-------+--------+-------+---------

或者,是否有办法使用select-from-where查询来获取此表和其他表 meta数据?
谢谢。

j13ufse2

j13ufse21#

如果使用-E选项启动psql,则可以获得\d背后的查询,然后运行\d也将显示元数据查询。
一旦您有了这个查询,就应该很容易使它适应您的需要。
如果您需要它来构建DDL语句的列表,您可以使用psql\gexec将查询结果作为SQL语句执行。

gfttwv5a

gfttwv5a2#

如果你想得到这个查询,你可以像上面的注解一样运行\set ECHO_HIDDEN on,如果你这样做,你会得到这个查询:

SELECT n.nspname as "Schema",
  c.relname as "Name",
  CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN 'foreign table' WHEN 'p' THEN 'partitioned table' WHEN 'I' THEN 'partitioned index' END as "Type",
  pg_catalog.pg_get_userbyid(c.relowner) as "Owner"
FROM pg_catalog.pg_class c
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','p','v','m','S','f','')
      AND n.nspname <> 'pg_catalog'
      AND n.nspname <> 'information_schema'
      AND n.nspname !~ '^pg_toast'
  AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;

所以,你知道,你去那里。

相关问题