PostgreSQL附带了一个命令 - COMMENT 。如果想要记录数据库中的内容,这个命令很有用。本文将介绍如何使用此命令。
随着数据库的不断发展和数据关系变得越来越复杂,跟踪数据库中添加的所有内容会变得非常困难。要记录数据的组织方式以及可能随时间添加或更改的组件,有必要添加某种文档。
例如,文档可以写在外部文件中,但这会产生一种问题,他们很快就会变为过时的文件。PostgreSQL有一个解决这个问题的方法:COMMENT命令。使用它可以向各种数据库对象添加注释,例如在需要时更新的列,索引,表和函数。
查看数据和添加注释
PostgreSQL的psql交互式shell包含许多强大的命令来查看和操作数据。\d命令会显示所有可见表,视图,物化视图,序列和外部表的列表。还有几种\d命令的组合可用于指定是否要查看索引,映射,约束等。结合+(例如\d+),该命令将为您提供对象的扩展视图,包含一个描述列,这是文档或COMMENT编写的位置。
COMMENT命令是我们将数据描述添加到数据库对象的方法。不要将COMMENT与\ * * \或 SQL中的 -- 相混淆,因为它们是在SQL文件中编写的,在数据"htmlcode">
postgres=# \d+ List of relations Schema | Name | Type | Owner | Size | Description --------+------------------+---------------+----------+------------+--------------- public | commenttest | table | postgres | 8192 bytes |
由于commenttest是一个刚刚创建的新表,因此Description列为空。可以通过以下命令添加注释:
postgres=# COMMENT ON TABLE commenttest IS 'A table of students in different departments'; COMMENT
现在再次运行\d+,可以看到描述列填充了注释。
postgres=# \d+ List of relations Schema | Name | Type | Owner | Size | Description --------+------------------+---------------+----------+------------+--------------- public | commenttest | table | postgres | 8192 bytes | A table of students in different departments
这是向表中添加描述信息的步骤。 接着,我们需要考虑如何向表的列中添加描述。
要查看表中每个列的描述列,可以运行类似以下命令:
postgres=# \d+ commenttest Table "public.commenttest" Column | Type | Collation | Nullable | Default | Storage | Stats target | Description -----------------+---------+-----------+----------+---------+----------+--------------+------------- student_id | integer | | | | plain | | student_name | text | | | | extended | | student_major | text | | | | extended | | department_id | integer | | | | plain | | department_name | text | | | | extended | | nationality | text | | | | extended | |
为每列添加描述与我们在表中添加一个列的方式类似。例如:
postgres=# COMMENT ON COLUMN commenttest.student_id IS 'ID of the student'; COMMENT postgres=# COMMENT ON COLUMN commenttest.student_name IS 'name of the student'; COMMENT postgres=# COMMENT ON COLUMN commenttest.student_major IS 'major of the student'; COMMENT postgres=# COMMENT ON COLUMN commenttest.department_id IS 'ID of the department'; COMMENT postgres=# COMMENT ON COLUMN commenttest.department_name IS 'name of the department'; COMMENT postgres=# COMMENT ON COLUMN commenttest.nationality IS 'nationality of the student'; COMMENT
添加描述后,再次查看表的描述列信息:
postgres=# \d+ commenttest Table "public.commenttest" Column | Type | Collation | Nullable | Default | Storage | Stats target | Description -----------------+---------+-----------+----------+---------+----------+--------------+---------------------------- student_id | integer | | | | plain | | ID of the student student_name | text | | | | extended | | name of the student student_major | text | | | | extended | | major of the student department_id | integer | | | | plain | | ID of the department department_name | text | | | | extended | | name of the department nationality | text | | | | extended | | nationality of the student
可以看到描述列已经添加好相应注释。这样添加过注释之后,名字复杂且难懂的列名就能让最终用户比较容易理解且不会产生歧义。
我们也可以使用类似的方式向索引中添加描述,这样在数据库使用过程中,可以防止由于索引数量的增加而导致的混淆和歧义问题。
而且如果使用pg_dump迁移PostgreSQL数据库,则使用COMMENT进行的任何注释都会存储在转储文件中。
补充:给postgresql数据库的表和列添加注释(comment)
postgresql 数据库国内用的人并不是很多,而一些老项目采用了这个数据库。维护起来特别麻烦,因为国内用的人比较少,相关资料也很少。
另外还有一些函数,postgresql 也没有对应的提供。还有对于表分区,低版本的 postgresql 数据库根本都没有这个功能,不支持。需要自己自动的创建表进行分区。
总之 postgresql 数据库用起来实在是太过麻烦,本文总结了一些给 postgresql 数据库的表和列添加注释的方法,方便已经采用 postgresql 数据库而不得不用的程序员。
首先说给表添加注释:
comment on table xttblog is '业余草';
其中 xttblog 是表名,添加的注释是“业余草”。
给列添加注释的方法如下:
create table xttblog(id int not null, url_id int); comment on column xttblog.id is '主键ID,自增';
注意创建表的时候,不能再列后面加 comment 。添加后执行会报错,因为这是 MySQL,Oracle的用法,不是 Postgresql 的用法。
下面再说说如何查询表中的注释。sql 语句如下:
select description from pg_descriptionjoin pg_class on pg_description.objoid = pg_class.oid where relname = 'xttblog'
其中以 pg_ 开头的表都是 Postgresql 数据库的系统表。系统表中存储着很多与表和配置相关的信息。
PostgreSQL 获取数据表的注释信息和表中字段的注释信息和上面的 SQL 类似。
和表相关的信息都在 pg_description 这个表中,查 pg_description 这个系统表,里面有存表和字段的备注。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]