我最近发现你可以在PostgreSQL中为所有类型的对象添加注释.特别是,我有兴趣玩数据库的评论.例如,要设置数据库的注释:
COMMENT ON DATABASE mydatabase IS 'DB Comment';
Run Code Online (Sandbox Code Playgroud)
然而,相反的说法是什么,得到评论mydatabase?
从psql命令行中,我可以看到其他资料的结果一起注释\l+命令; 我可以借助awk来实现我的目标.但是如果可能的话,我宁愿使用SQL语句.
Erw*_*ter 35
首先,可以使用强制转换为适当的对象标识符类型简化对表注释的查询:
SELECT description
FROM pg_description
WHERE objoid = 'myschema.mytbl'::regclass;
Run Code Online (Sandbox Code Playgroud)
架构部分是可选的.如果省略它,则当前search_path决定任何名为的表的可见性mytbl.
更好的是,PostgreSQL中有专门的函数来简化和规范这些查询.手册:
obj_description(object_oid,...获取数据库对象的注释catalog_name)
shobj_description(object_oid,...获取共享数据库对象的注释catalog_name)
表说明:
SELECT obj_description('myschema.mytbl'::regclass, 'pg_class');
Run Code Online (Sandbox Code Playgroud)
数据库说明:
SELECT pg_catalog.shobj_description(d.oid, 'pg_database') AS "Description"
FROM pg_catalog.pg_database d
WHERE datname = 'mydb';
Run Code Online (Sandbox Code Playgroud)
那么,阅读优秀的手册是有启发性的.:)
但是在这种情况下有一个更直接的路由:大多数psql元命令都是用纯SQL实现的.开始一个会议,看看幕后的魔力.手册:psql -E
-E
--echo-hidden回显由
\d其他反斜杠命令生成的实际查询.您可以使用它来研究psql的内部操作.这相当于将变量设置ECHO_HIDDEN为on.
mar*_*tin 11
要获取有关数据库的注释,请使用以下查询:
select description from pg_shdescription
join pg_database on objoid = pg_database.oid
where datname = '<database name>'
Run Code Online (Sandbox Code Playgroud)
此查询将获取给定表名的表注释:
select description from pg_description
join pg_class on pg_description.objoid = pg_class.oid
where relname = '<your table name>'
Run Code Online (Sandbox Code Playgroud)
如果在不同的模式中使用相同的表名,则需要稍微修改一下:
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>'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14989 次 |
| 最近记录: |