关键字:
COMMENT用途
通常用于数据库对象(如表、视图、索引、列等)上添加注释或描述信息。其主要目的是提供数据库对象的文档化或注释,便于数据库开发人员、管理员等更容易理解数据库的结构和目的。
COMMENT存储一个数据库对象的注释,对于每一个对象只保存一个注释字符串,因此为了修改一段注释,需要对同一个对象发出一个新的COMMENTON命令。对于移除一段注释,可在文本字符串的位置上写上NULL。此外,当对象被删除时,其注释也会被自动删除。KES中COMMENT ON命令支持的对象非常全面,主要介绍TABLE、COLUMN、INDEX、FUNCTION、PROCEDURE、view等常见的对象。COMMENT ON命令中的注释内容是客户端传入,因此遵循客户端的编码方式,一般中文的默认编码方式是GBK,该值传入服务端时会自动将编码方式转为服务端编码方式存储。可以通过show server_encoding/client_encoding命令查看服务端或客户端编码。
COMMENT语法
COMMENT ON完整的语法树如下附录所示,下图2-1为COMMENT ON支持的常见对象和支持的用户接口。注释常用的接口,除了新增注释,还包括对注释修改(其语法和新增注释相同),删除注释(将注释的字符串位置上写NULL即可)。
上图中,对于object_name,即被注释的对象名称,是可以被其前方的关键字直接限定的。而对于列的注释,是必须要用relation_name(表、视图后组合类型等)后接具体的列名,才能为列完成注释。
- COMMENT ON TABLE语句
COMMENT ON TABLE tbl_name IS ‘tbl_comment_text’;
- COMMENT ON VIEW 语句
COMMENT ON VIEW tbl_name IS ‘view_comment_text’;
3.COMMENT ON COLUMN 语句
COMMENT ON COLUMN col_name IS ‘col_comment_text’;
4.COMMENT ON INDEX语句
COMMENT ON INDEX idx_name IS ‘idx_comment_text’;
5.COMMENT ON FUNCTION语句
COMMENT ON FUNCTION function_name(
[ [argmode] [argname] argtype [, ...] ] )
IS ‘fun_comment_text’;
6.COMMENT ON PRODURE语句
COMMENT ON PRODURE procedure_name(
[ [argmode] [argname] argtype [, ...] ] )
IS ‘proc_comment_text’;
7.COMMENT ON TYPE语句
COMMENT ON PRODURE procedure_name(
[ [argmode] [argname] argtype [, ...] ] )
IS ‘proc_comment_text’;
语法用例
注释的创建、修改和删除
CREATE TABLE sales
(
sales_id NUMBER,
quantity NUMBER,
name VARCHAR(30)
);
-- 新增表注释
COMMENT ON TABLE sales IS 'Sales Information comment';
-- 新增列注释
COMMENT ON COLUMN sales.name IS 'This is sales name';
-- 修改列注释
COMMENT ON COLUMN sales.name IS 'New sales name comment';
-- 删除列注释
COMMENT ON COLUMN sales.name IS NULL;
-- 创建索引
CREATE INDEX index_sales_id ON sales(sales_id);
-- 新增索引注释
COMMENT ON INDEX index_sales_id IS 'sales ID index comment';
select * from pg_description where objoid = 'index_sales_id'::regclass;
-- 删除索引注释
COMMENT ON INDEX index_sales_id IS NULL;
select * from pg_description where objoid = 'index_sales_id'::regclass;
-- 创建函数
CREATE FUNCTION hello(s CHAR(20)) RETURNS CHAR(50) AS
$$ BEGIN
RETURN CONCAT('Hello, ',s,'!');
END;
$$LANGUAGE plpgsql;
-- 新增函数注释
COMMENT ON FUNCTION hello IS 'a func comment';
附录
KES数据库中COMMENT ON的完整语法树