• 售前

  • 售后

热门帖子
入门百科

PostgreSQL中的COMMENT用法说明

[复制链接]
冀苍鸾 显示全部楼层 发表于 2021-10-26 13:36:13 |阅读模式 打印 上一主题 下一主题
PostgreSQL附带了一个下令 - COMMENT 。如果想要记录数据库中的内容,这个下令很有用。本文将介绍怎样利用此下令。
随着数据库的不绝发展和数据关系变得越来越复杂,跟踪数据库中添加的所有内容会变得非常困难。要记录数据的构造方式以及大概随时间添加或更改的组件,有必要添加某种文档。
比方,文档可以写在外部文件中,但这会产生一种问题,他们很快就会变为过期的文件。PostgreSQL有一个办理这个问题的方法:COMMENT下令。利用它可以向各种数据库对象添加表明,比方在必要时更新的列,索引,表和函数。
检察数据和添加表明

PostgreSQL的psql交互式shell包罗很多强盛的下令来检察和操作数据。\d下令会表现所有可见表,视图,物化视图,序列和外部表的列表。另有几种\d下令的组合可用于指定是否要检察索引,映射,束缚等。结合+(比方\d+),该下令将为您提供对象的扩展视图,包罗一个描述列,这是文档或COMMENT编写的位置。
COMMENT下令是我们将数据描述添加到数据库对象的方法。不要将COMMENT与\ * * \或 SQL中的 -- 相肴杂,由于它们是在SQL文件中编写的,在数据​​库中不可见。另一方面,COMMENT不是尺度SQL,而是PostgreSQL独有的。
有很多数据库对象可供我们利用COMMENT下令。此中最常见的是表,索引和列。但是,必须是对象的所有者或管理员才气利用COMMENT。
运行\d+以表现表及其描述,比方:
  1. postgres=# \d+
  2.                  List of relations
  3. Schema |    Name    |   Type   | Owner  |  Size  | Description
  4. --------+------------------+---------------+----------+------------+---------------
  5. public | commenttest   | table     | postgres | 8192 bytes |
复制代码
由于commenttest是一个刚刚创建的新表,因此Description列为空。可以通过以下下令添加表明:
  1. postgres=# COMMENT ON TABLE commenttest IS 'A table of students in different departments';
  2. COMMENT
复制代码
现在再次运行\d+,可以看到描述列添补了表明。
  1. postgres=# \d+
  2.                  List of relations
  3. Schema |    Name    |   Type   | Owner  |  Size  | Description
  4. --------+------------------+---------------+----------+------------+---------------
  5. public | commenttest   | table     | postgres | 8192 bytes | A table of students in different departments
复制代码
这是向表中添加描述信息的步调。 接着,我们必要考虑怎样向表的列中添加描述。
要检察表中每个列的描述列,可以运行类似以下下令:
  1. postgres=# \d+ commenttest
  2.                    Table "public.commenttest"
  3.    Column   | Type  | Collation | Nullable | Default | Storage | Stats target | Description
  4. -----------------+---------+-----------+----------+---------+----------+--------------+-------------
  5. student_id   | integer |      |     |     | plain  |       |
  6. student_name  | text  |      |     |     | extended |       |
  7. student_major  | text  |      |     |     | extended |       |
  8. department_id  | integer |      |     |     | plain  |       |
  9. department_name | text  |      |     |     | extended |       |
  10. nationality   | text  |      |     |     | extended |       |
复制代码
为每列添加描述与我们在表中添加一个列的方式类似。比方:
  1. postgres=# COMMENT ON COLUMN commenttest.student_id IS 'ID of the student';
  2. COMMENT
  3. postgres=# COMMENT ON COLUMN commenttest.student_name IS 'name of the student';
  4. COMMENT
  5. postgres=# COMMENT ON COLUMN commenttest.student_major IS 'major of the student';
  6. COMMENT
  7. postgres=# COMMENT ON COLUMN commenttest.department_id IS 'ID of the department';
  8. COMMENT
  9. postgres=# COMMENT ON COLUMN commenttest.department_name IS 'name of the department';
  10. COMMENT
  11. postgres=# COMMENT ON COLUMN commenttest.nationality IS 'nationality of the student';
  12. COMMENT
复制代码
添加描述后,再次检察表的描述列信息:
  1. postgres=# \d+ commenttest
  2.                       Table "public.commenttest"
  3.    Column   | Type  | Collation | Nullable | Default | Storage | Stats target |    Description     
  4. -----------------+---------+-----------+----------+---------+----------+--------------+----------------------------
  5. student_id   | integer |      |     |     | plain  |       | ID of the student
  6. student_name  | text  |      |     |     | extended |       | name of the student
  7. student_major  | text  |      |     |     | extended |       | major of the student
  8. department_id  | integer |      |     |     | plain  |       | ID of the department
  9. department_name | text  |      |     |     | extended |       | name of the department
  10. nationality   | text  |      |     |     | extended |       | nationality of the student
复制代码
可以看到描述列已经添加好相应表明。如许添加过表明之后,名字复杂且难明的列名就能让最终用户比力容易明白且不会产生歧义。
我们也可以利用类似的方式向索引中添加描述,如许在数据库利用过程中,可以防止由于索引数目的增长而导致的肴杂和歧义问题。
而且如果利用pg_dump迁移PostgreSQL数据库,则利用COMMENT举行的任何表明都会存储在转储文件中。
补充:给postgresql数据库的表和列添加表明(comment)
postgresql 数据库国内用的人并不是很多,而一些老项目采用了这个数据库。维护起来特殊贫困,由于国内用的人比力少,相关资料也很少。
别的另有一些函数,postgresql 也没有对应的提供。另有对于表分区,低版本的 postgresql 数据库根本都没有这个功能,不支持。必要自己自动的创建表举行分区。
总之 postgresql 数据库用起来实在是太过贫困,本文总结了一些给 postgresql 数据库的表和列添加表明的方法,方便已经采用 postgresql 数据库而不得不消的程序员。
首先说给表添加表明:
  1. comment on table xttblog is '业余草';
复制代码
此中 xttblog 是表名,添加的表明是“业余草”。
给列添加表明的方法如下:
  1. create table xttblog(id int not null, url_id int);
  2. comment on column xttblog.id is '主键ID,自增';
复制代码
留意创建表的时候,不能再列后面加 comment 。添加后实行会报错,由于这是 MySQL,Oracle的用法,不是 Postgresql 的用法。
下面再说说怎样查询表中的表明。sql 语句如下:
  1. 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 这个系统表,里面有存表和字段的备注。
以上为个人履历,希望能给各人一个参考,也希望各人多多支持脚本之家。如有错误或未考虑完全的地方,望不吝见教。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作