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

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

(0)

相关推荐

  • PostgreSQL 实现查询表字段信息SQL脚本

    查询格式: SELECT c.relname 表名称, A.attname AS 字段名称, col_description(A.attrelid,A.attnum) AS 注释, format_type ( A.atttypid, A.atttypmod ) AS 类型, CASE WHEN A.attnotnull='f' THEN '否' ELSE '是' END AS 是否必填, a.attnum 序号 FROM pg_class AS c, pg_attribute AS a WHER

  • PostgreSQL11修改wal-segsize的操作

    修改有风险,谨慎行事. PostgreSQL11以前改变wal-segsize(WAL段大小)必须在编译时通过–with-wal-segsize参数确定,编译后不可更改. #PostgreSQL11之前的版本 #数据块按8K划分(--with-blocksize,单位为K,默认为8K) #WAL块尺寸按8k划分(--with-wal-blocksize,单位为K,默认为8K) #数据文件按1G一个分解(--with-segsize,单位为G,默认为1G) #WAL段尺寸按16MB划分(--wit

  • PostgreSQL 正则表达式替换-使用变量方式

    ###不定期更新 把AAAA替换为A-A-A-A- javascript alert('AAAA'.replace(/([A]{1})/g,"$1-")); ()中的内容用变量$1 $2 $n代替 PostgreSQL select regexp_replace('AAAAAAAAAAAAAAAAAAAAAA','([A-Z]{1})','\1-','g') ()中的内容用变量\1 \2 \n代替 获取大括号中的内容 select f1[1] from regexp_matches('

  • 解决postgresql表中的字段名称包含特殊符号的问题

    在创建postgresql表的时候,由于字段中包含了"()"这种特殊字符,导致创建表的时候报错. 解决方法: 给包含特殊字符的字段加上双引号"",再进行创建表即可 例如: create table freighttransport_tab ( id serial, 日期 TEXT, "重量(公斤)" TEXT ) 此时"重量(公斤)"字段包含特殊符号(),创建表时,在sql语句中对该字段添加双引号即可. 补充:PostgreS

  • PostgreSQL 定义返回表函数的操作

    本文我们学习如何在PostgreSQL 开发返回表函数. 示例数据表 我们使用的示例数据库表为film,如下图所示: 示例1 第一个函数发挥所有满足条件film表记录,这里使用ilike操作,和like类似,但不区分大小写: CREATE OR REPLACE FUNCTION get_film (p_pattern VARCHAR) RETURNS TABLE ( film_title VARCHAR, film_release_year INT ) AS $$ BEGIN RETURN QU

  • postgresql varchar字段regexp_replace正则替换操作

    1.替换目标 1).contact字段类型 varchar. 2).去掉字段中连续的两个,每个等号后面数字不同, effective_caller_id_name=051066824513,effective_caller_id_number=051066824513 2.查询原字段内容 select contact from pbx_agents where contact ~ 'effective_caller_id_name=' limit 2 "{sip_append_audio_sdp

  • postgreSQL 使用timestamp转成date格式

    尝试了以下两种方式,将pg中的timestamp格式转换成date格式: 方式一: select to_date( to_char( f.begin_time, 'yyyy-mm-dd' ), 'yyyy-mm-dd' ) from hafd f 方式二: select f.begin_time::DATE from hafd f 大概比较了一下,9万条测试数据,方式二的性能更好! 补充:PostgreSQL中的时间戳格式转化常识 前提:当数据库中保存的是timestamp类型时,我们需要通过这

  • 关于PostgreSQL错误日志与慢查询日志收集

    PostgreSQL错误日志与慢查询日志对于线上系统分析.问题预警.问题排查起到非常重要的作用,在此不做赘述. 此文档记录错误日志与慢查询日志的收集.分析与存储展示的方法. 一.总体思路 PostgreSQL日志输出可以配置多种多样的格式,其中以csvlog格式输出的日志信息最全面.但是CSV日志只能以本地文件的方式收集,不能直接写入网络,实时上传日志服务器. 日志收集: PostgreSQL服务器分布在不同的机器,我们使用rsyslog客户端-服务器的方式来收集日志到日志服务器.具体方法:在P

  • PostgreSQL中的COMMENT用法说明

    PostgreSQL附带了一个命令 - COMMENT .如果想要记录数据库中的内容,这个命令很有用.本文将介绍如何使用此命令. 随着数据库的不断发展和数据关系变得越来越复杂,跟踪数据库中添加的所有内容会变得非常困难.要记录数据的组织方式以及可能随时间添加或更改的组件,有必要添加某种文档. 例如,文档可以写在外部文件中,但这会产生一种问题,他们很快就会变为过时的文件.PostgreSQL有一个解决这个问题的方法:COMMENT命令.使用它可以向各种数据库对象添加注释,例如在需要时更新的列,索引,

  • postgreSQL中的case用法说明

    工具:postgreSQL Navicat Premium 又一次在看代码的时候,发现了不懂的东西! 这次就是case when then SQL CASE表达式是一种通用的条件表达式,类似于其它语言中的if/else语句. CASE WHEN condition THEN result [WHEN ...] [ELSE result] END 解释: condition是一个返回boolean的表达式. 如果为真,那么CASE表达式的结果就是符合条件的result. 如果结果为假,那么以相同方

  • PostgreSQL中的collations用法详解

    与Oracle相比,PostgreSQL对collation的支持依赖于操作系统. 以下是基于Centos7.5的测试结果 $ env | grep LC $ env | grep LANG LANG=en_US.UTF-8 使用initdb初始化集群的时候,就会使用这些操作系统的配置. postgres=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------

  • PostgreSQL 中字段类型varchar的用法

    PostgreSql数据库中varchar类型与sql server中字段用法有差别,PostgreSql中如果字段设置为varchar类型长度为10,则无论存字母.数字或其它符号,长度最大为10个,也就是字母和汉字占的位置是一样的. Sql server中如设置字段类型为nvarchar类型长度为10,则存汉字最大为5个,字母为10个,字母加汉字混合时,字母和汉字占的长度一样 补充:Postgresql 数据库 varchar()字符占用多少字节 如下所示: create table tmp1

  • postgresql中wal_level的三个参数用法说明

    wal_level中有三个主要的参数:minimal.archive和hot_standby 1.minimal是默认的值,它仅写入崩溃或者突发关机时所需要的信息(不建议使用). 2.archive是增加wal归档所需的日志(最常用). 3.hot_standby是在备用服务器上增加了运行只读查询所需的信息,一般实在流复制的时候使用到. 补充:postgresql WAL相关参数 配置文件 # - Settings - wal_level = minimal # minimal, replica

  • 浅谈PostgreSQL中的孤儿文件用法(orphaned data files)

    创建一个测试表 postgres=# create table t1(a int); CREATE TABLE postgres=# select pg_relation_filepath('t1'); pg_relation_filepath ---------------------- base/75062/75297 (1 row) postgres=# 在操作系统上已经可以看到该文件. $ ls -la $PGDATA/base/75062/75297 -rw------- 1 post

  • postgresql 中round函数的用法说明

    round函数是去小数点,我查过好多方法并不好用,于是有了 round(cast(a/b as numeric), 2) 这个就可以用,要加个cast才可以的 补充:postgresql中to_char和round的混合使用 在postgresql中大家都用过round吧,当遇到小数的时候该如何显示呢?看例子 SELECT to_char(round(127 * 0.1 / 67543,6)*10000,'90.99') 1.88 SELECT to_char(round(127 * 0.1 /

  • PostgreSQL中的VACUUM命令用法说明

    每当PostgreSQL数据库中的表中的行被更新或删除时,死亡行会被遗留下来.VACUUM则会把它们除去来使空间能被重新利用.如果一个表没有被清空,它会变得臃肿,浪费磁盘空间而且会降低顺序表扫描的速度,而且在较小范围内也会降低索引扫描的速度. VACUUM命令只可以移除这些不再被需要的行版本(也被称为元组).如果被删除事务的事务ID(存储在xmax系统列中)比仍然活跃在PostgreSQL数据库(或者共享表的整个集群)中最老的事务(xmin界限)更老,那么这个元组将不再被需要. 注意以下三种情况

  • jQuery中get方法用法分析

    本文实例讲述了jQuery中get方法用法.分享给大家供大家参考,具体如下: 参数:url,[data],[callback],[type] url 待载入页面的URL地址. data 待发送 Key/value 参数. callback 载入成功时回调函数. type 返回内容格式,xml, html, script, json, text, _default. 案例1 表单代码: <form id="form1" action="#"> <p&

  • 深入分析Mysql中limit的用法

    Mysql中limit的用法:在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能. SELECT * FROM table   LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数.LIMIT 接受一个或两个数字参数.参数必须是一个整数常量.如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行

随机推荐