PostgreSQL中的COMMENT用法说明

 更新时间:2021年01月08日 14:32:47   作者:瀚高PG实验室  
这篇文章主要介绍了PostgreSQL中的COMMENT用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

PostgreSQL附带了一个命令 - COMMENT 。如果想要记录数据库中的内容,这个命令很有用。本文将介绍如何使用此命令。

随着数据库的不断发展和数据关系变得越来越复杂,跟踪数据库中添加的所有内容会变得非常困难。要记录数据的组织方式以及可能随时间添加或更改的组件,有必要添加某种文档。

例如,文档可以写在外部文件中,但这会产生一种问题,他们很快就会变为过时的文件。PostgreSQL有一个解决这个问题的方法:COMMENT命令。使用它可以向各种数据库对象添加注释,例如在需要时更新的列,索引,表和函数。

查看数据和添加注释

PostgreSQL的psql交互式shell包含许多强大的命令来查看和操作数据。\d命令会显示所有可见表,视图,物化视图,序列和外部表的列表。还有几种\d命令的组合可用于指定是否要查看索引,映射,约束等。结合+(例如\d+),该命令将为您提供对象的扩展视图,包含一个描述列,这是文档或COMMENT编写的位置。

COMMENT命令是我们将数据描述添加到数据库对象的方法。不要将COMMENT与\ * * \或 SQL中的 -- 相混淆,因为它们是在SQL文件中编写的,在数据​​库中不可见。另一方面,COMMENT不是标准SQL,而是PostgreSQL独有的。

有很多数据库对象可供我们使用COMMENT命令。其中最常见的是表,索引和列。但是,必须是对象的所有者或管理员才能使用COMMENT。

运行\d+以显示表及其描述,例如:

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 这个系统表,里面有存表和字段的备注。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • postgresql高级应用之行转列&汇总求和的实现思路

    postgresql高级应用之行转列&汇总求和的实现思路

    这篇文章主要介绍了postgresql高级应用之行转列&汇总求和的实现思路,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • PostgreSQL 查看数据库,索引,表,表空间大小的示例代码

    PostgreSQL 查看数据库,索引,表,表空间大小的示例代码

    PostgreSQL 提供了多个系统管理函数来查看表,索引,表空间及数据库的大小,下面详细介绍一下
    2013-08-08
  • postgresql实现对已有数据表分区处理的操作详解

    postgresql实现对已有数据表分区处理的操作详解

    这篇文章主要为大家详细介绍了postgresql实现对已有数据表分区处理的操作的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • PostgreSQL教程(十四):数据库维护

    PostgreSQL教程(十四):数据库维护

    这篇文章主要介绍了PostgreSQL教程(十四):数据库维护,本文讲解了恢复磁盘空间、更新规划器统计、VACUUM和ANALYZE的示例、定期重建索引等内容,需要的朋友可以参考下
    2015-05-05
  • Postgresql REGEXP开头的正则函数用法图文详解

    Postgresql REGEXP开头的正则函数用法图文详解

    正则表达式是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串,下面这篇文章主要给大家介绍了关于Postgresql REGEXP开头的正则函数用法的相关资料,需要的朋友可以参考下
    2024-02-02
  • PostgreSQL 更新JSON,JSONB字段的操作

    PostgreSQL 更新JSON,JSONB字段的操作

    这篇文章主要介绍了PostgreSQL 更新JSON,JSONB字段的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 浅谈PostgreSQL和SQLServer的一些差异

    浅谈PostgreSQL和SQLServer的一些差异

    这篇文章主要介绍了浅谈PostgreSQL和SQLServer的一些差异,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • postgresql查询锁表以及解除锁表操作

    postgresql查询锁表以及解除锁表操作

    这篇文章主要介绍了postgresql查询锁表以及解除锁表操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • PostgreSQL自动更新时间戳实例代码

    PostgreSQL自动更新时间戳实例代码

    最近有这么一个工程,需要使用postgresql数据库,在数据库中的好几个表中都需要时间戳这个字段,这篇文章主要给大家介绍了关于PostgreSQL自动更新时间戳的相关资料,需要的朋友可以参考下
    2021-11-11
  • PostgreSQL中实现自增的三种方式举例

    PostgreSQL中实现自增的三种方式举例

    很多小伙伴在把mysql数据库里面的表导入pgsql数据库的时候,会遇到新增数据的时候id不自增,这篇文章主要给大家介绍了关于PostgreSQL中实现自增的三种方式,需要的朋友可以参考下
    2024-02-02

最新评论