如何检索PostgreSQL数据库的注释?

时间:2012-07-15 17:16:23

标签: postgresql

我最近发现你可以attach a comment加入PostgreSQL中的所有类型的对象。特别是,我有兴趣玩数据库的评论。例如,要设置数据库的注释:

COMMENT ON DATABASE mydatabase IS 'DB Comment';

然而,对于获取 mydatabase的评论,相反的说法是什么?

psql命令行,我可以看到评论以及\l+命令导致的其他信息;我可以借助awk来实现我的目标。但是如果可能的话,我宁愿使用SQL语句。

5 个答案:

答案 0 :(得分:34)

首先,您可以使用强制转换为适当的object identifier type来简化对表注释的查询:

SELECT description
FROM   pg_description
WHERE  objoid = 'myschema.mytbl'::regclass;

架构部分是可选的。如果省略它,您当前的search_path会决定任何名为mytbl的表格的可见性。

更好,PostgreSQL中有专用函数来简化和规范这些查询。 The manual

  

obj_description( object_oid catalog_name ) ...获取评论   数据库对象

     

shobj_description( object_oid catalog_name ) ...获取对共享数据库对象的评论

表格说明:

SELECT obj_description('myschema.mytbl'::regclass, 'pg_class');

数据库说明:

SELECT pg_catalog.shobj_description(d.oid, 'pg_database') AS "Description"
FROM   pg_catalog.pg_database d
WHERE  datname = 'mydb';

你怎么知道这件事?

那么,阅读优秀的手册是有启发性的。 :)
但在这种情况下有一条更直接的路由:大多数psql元命令都是用纯SQL实现的。与psql -E开始会话,看看窗帘背后的魔力。 The manual:

  

-E
  --echo-hidden

     

回显\d和其他反斜杠命令生成的实际查询。您可以使用它来研究psql的内部操作。这个   相当于将变量ECHO_HIDDEN设置为on

答案 1 :(得分:12)

要获取有关数据库的注释,请使用以下查询:

select description from pg_shdescription
join pg_database on objoid = pg_database.oid
where datname = '<database name>'

此查询将为您提供给定表名的表注释:

select description from pg_description
join pg_class on pg_description.objoid = pg_class.oid
where relname = '<your table name>'

如果在不同的模式中使用相同的表名,则需要稍微修改一下:

select description from pg_description
join pg_class on pg_description.objoid = pg_class.oid
join pg_namespace on pg_class.relnamespace = pg_namespace.oid
where relname = '<table name>' and nspname='<schema name>'

答案 2 :(得分:1)

对于表格,请尝试

file:///var/mobile/Containers/Data/Application/B2A1EE50-D800-4BB0-B475-6C7F210C913C/Documents/2016-06-01%2021:49:32

这显示我添加到表格中的评论

答案 3 :(得分:0)

此查询将仅获取所有表的表注释

SELECT RelName,Description 
FROM pg_Description
JOIN pg_Class 
ON pg_Description.ObjOID = pg_Class.OID
WHERE ObjSubID = 0

答案 4 :(得分:0)

此查询将返回表的注释

 SELECT obj_description('public.myTable'::regclass)
 FROM pg_class
 WHERE relkind = 'r' limit 1