COMMENT — 定义或者更改一个对象的注释
COMMENT ON { ACCESS METHODobject_name
| AGGREGATEaggregate_name
(aggregate_signature
) | CAST (source_type
AStarget_type
) | COLLATIONobject_name
| COLUMNrelation_name
.column_name
| CONSTRAINTconstraint_name
ONtable_name
| CONSTRAINTconstraint_name
ON DOMAINdomain_name
| CONVERSIONobject_name
| DATABASEobject_name
| DOMAINobject_name
| EXTENSIONobject_name
| EVENT TRIGGERobject_name
| FOREIGN DATA WRAPPERobject_name
| FOREIGN TABLEobject_name
| FUNCTIONfunction_name
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] | INDEXobject_name
| LARGE OBJECTlarge_object_oid
| MATERIALIZED VIEWobject_name
| OPERATORoperator_name
(left_type
,right_type
) | OPERATOR CLASSobject_name
USINGindex_method
| OPERATOR FAMILYobject_name
USINGindex_method
| POLICYpolicy_name
ONtable_name
| [ PROCEDURAL ] LANGUAGEobject_name
| PROCEDUREprocedure_name
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] | PUBLICATIONobject_name
| ROLEobject_name
| ROUTINEroutine_name
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] | RULErule_name
ONtable_name
| SCHEMAobject_name
| SEQUENCEobject_name
| SERVERobject_name
| STATISTICSobject_name
| SUBSCRIPTIONobject_name
| TABLEobject_name
| TABLESPACEobject_name
| TEXT SEARCH CONFIGURATIONobject_name
| TEXT SEARCH DICTIONARYobject_name
| TEXT SEARCH PARSERobject_name
| TEXT SEARCH TEMPLATEobject_name
| TRANSFORM FORtype_name
LANGUAGElang_name
| TRIGGERtrigger_name
ONtable_name
| TYPEobject_name
| VIEWobject_name
} IS {string_literal
| NULL } whereaggregate_signature
is: * | [argmode
] [argname
]argtype
[ , ... ] | [ [argmode
] [argname
]argtype
[ , ... ] ] ORDER BY [argmode
] [argname
]argtype
[ , ... ]
COMMENT
存储关于一个数据库对象的注释。
对每一个对象只保存一个注释字符串,因此为了修改一段注释,对同一个对象
发出一个新的COMMENT
命令。要移除一段注释,可在文
本字符串的位置上写上NULL
。当对象被删除时,其注释
也会被自动删除。
对要进行评论的对象进行了SHARE UPDATE EXCLUSIVE
锁定。
对大部分类型的对象,只有对象的拥有者可以设置注释。角色没有拥有者,因此
COMMENT ON ROLE
的规则是你必须作为一个超级用户来对一个
超级用户角色设置注释,或者具有CREATEROLE
特权来对非超级用
户角色设置注释。同样的,访问方法也没有拥有者,你必须作为一个超级用户来
对一个访问方法设置注释。当然,一个超级用户可以对任何东西设置注释。
使用psql的\d
命令家族可以查看注释。其他检索注释的用户接口可以构建在
psql使用的内建函数之上,即
obj_description
、col_description
以及shobj_description
(见表 9.77)。
object_name
relation_name
.column_name
aggregate_name
constraint_name
function_name
operator_name
policy_name
procedure_name
routine_name
rule_name
trigger_name
要被注释的对象的名称。驻留在模式(表、函数等)中的对象的名称可以是模式限定的。
在注释一列时,relation_name
必须
引用一个表、视图、组合类型或者外部表。
table_name
domain_name
当在一个约束、触发器、规则或者策略上创建一段注释时,这些参数指定在其上定义 该对象的表或域的名称。
source_type
造型的源数据类型的名称。
target_type
造型的目标数据类型的名称。
argmode
一个函数,存储过程或者聚集函数的参数的模式:IN
、
OUT
、INOUT
或者VARIADIC
。
如果被省略,默认值是IN
。注意
COMMENT
并不真正关心
OUT
参数,因为决定函数的身份只需要输入参数。因此
列出IN
、INOUT
和VARIADIC
参数就足够了。
argname
一个函数,存储过程或者聚集函数参数的名称。注意
COMMENT
并不真正关心参数名称,
因为决定函数的身份只需要参数数据类型。
argtype
一个函数,存储过程或者聚集函数参数的数据类型。
large_object_oid
大对象的 OID。
left_type
right_type
操作符的参数的数据类型(可以是模式限定的)。对一个前缀操作符
的缺失参数可以写NONE
。
PROCEDURAL
这是一个噪声词。
type_name
该转换的数据类型的名称。
lang_name
该转换的语言的名称。
string_literal
新评论内容,以字符串字面量形式编写。
NULL
写入NULL
以删除该注释。
当前对查看注释没有安全机制:任何连接到一个数据库的用户能够看到 该数据库中所有对象的注释。对于数据库、角色、表空间这类共享对象, 注释被全局存储,因此连接到集簇中任何数据库的任何用户可以看到共 享对象的所有注释。因此,不要在注释中放置有安全性风险的信息。
为表mytable
附加一段注释:
COMMENT ON TABLE mytable IS 'This is my table.';
移除它:
COMMENT ON TABLE mytable IS NULL;
更多示例:
对GIN索引访问方法的注释为“GIN索引访问方法”; 对my_aggregate(双精度)的聚合函数的注释为“计算样本方差”; 将文本转换为int4的CAST的注释为“允许从文本到int4的转换”; 对“fr_CA”排序规则的注释为“加拿大法语”; 对my_table.my_column列的注释为“员工ID号”; 对my_conv转换的注释为“转换为UTF8”; 对bar表上bar_col_cons列的约束的注释为“约束列col”; 对DOMAIN dom上的dom_col_constr列的约束的注释为“约束域的col”; 对my_database数据库的注释为“开发数据库”; 对my_domain域的注释为“电子邮件地址域”; 对abort_ddl事件触发器的注释为“中止所有DDL命令”; 对hstore扩展的注释为“实现hstore数据类型”; 对mywrapper外部数据包装器的注释为“我的外部数据包装器”; 对my_foreign_table外部表的注释为“其他数据库中的员工信息”; 对my_function函数(时间戳)的注释为“返回罗马数字”; 对my_index索引的注释为“强制员工ID的唯一性”; 对plpython语言的注释为“存储过程的Python支持”; 对大对象346344的注释为“规划文档”; 对my_matview材料化视图的注释为“订单历史的摘要”; 对^(文本,文本)操作符的注释为“执行两个文本的交集”; 对-(NONE,整数)操作符的注释为“一元减”; 对int4ops操作类使用btree的注释为“btrees的4字节整数操作符”; 对integer_ops操作族使用btree的注释为“btrees的所有整数操作符”; 对mytable上my_policy策略的注释为“按用户过滤行”; 对my_proc过程(整数,整数)的注释为“运行报告”; 对alltables发布的注释为“发布所有表上的所有操作”; 对my_role角色的注释为“财务表的管理组”; 对my_routine例程(整数,整数)的注释为“运行例程(即函数或过程)”; 对my_table表上my_rule规则的注释为“记录员工记录的更新”; 对my_schema模式的注释为“部门数据”; 对my_sequence序列的注释为“用于生成主键”; 对myserver服务器的注释为“我的外部服务器”; 对my_statistics统计信息的注释为“改进规划器行估计”; 对alltables订阅的注释为“所有表上的所有操作的订阅”; 对my_schema.my_table表的注释为“员工信息”; 对my_tablespace表空间的注释为“索引的表空间”; 对my_config文本搜索配置的注释为“特殊词过滤”; 对swedish文本搜索词典的注释为“瑞典语的Snowball词干分析器”; 对my_parser文本搜索解析器的注释为“将文本分割成单词”; 对snowball文本搜索模板的注释为“Snowball词干分析器”; 对hstore到Python字典的转换的注释为“hstore和Python字典之间的转换”; 对my_table上my_trigger触发器的注释为“用于RI”; 对复杂数据类型的注释为“复数数据类型”; 对my_view视图的注释为“部门成本视图”;
SQL 标准中没有COMMENT
命令。