
# COMMENT
#### 功能描述
定义或修改对象的注释。
#### 注意事项
- 每个对象只存储一条注释，因此要修改对象的注释，对同一个对象发出一条新的COMMENT命令即可。要删除注释，在文本字符串的位置写入NULL。删除对象时，注释将自动删除。
- 目前查看注释没有相关安全机制：连接到数据库的任何用户都可以查看该数据库中对象的所有注释。共享对象（比如数据库、角色、表空间）的注释是全局存储的，连接到集群中任何数据库的任何用户都可以查看共享对象的所有注释。因此，不要在注释里添加与安全有关的敏感信息。
- 对大多数对象，只有对象的所有者才能设置注释。角色没有所有者，所以COMMENT ON ROLE命令仅可以由系统管理员对系统管理员角色执行，或者具有CREATE ROLE权限的角色也可以为非系统管理员角色添加注释。系统管理员可以对所有对象添加注释。
 
#### 语法格式
```
COMMENT ON
{
  AGGREGATE agg_name (agg_type [, ...] ) |
  CAST (source_type AS target_type) |
  COLLATION object_name |
  COLUMN { table_name.column_name | view_name.column_name } |
  CONSTRAINT constraint_name ON table_name |
  CONVERSION object_name |
  DATABASE object_name |
  DOMAIN object_name |
  EXTENSION object_name |
  FOREIGN DATA WRAPPER object_name |
  FOREIGN TABLE object_name |
  FUNCTION function_name ( [ {[ argmode ] [ argname ] argtype} [, ...] ] ) |
  INDEX object_name |
  LARGE OBJECT large_object_oid |
  OPERATOR operator_name (left_type, right_type) |
  OPERATOR CLASS object_name USING index_method |
  OPERATOR FAMILY object_name USING index_method |
  [ PROCEDURAL ] LANGUAGE object_name |
  ROLE object_name |
  RULE rule_name ON table_name |
  SCHEMA object_name |
  SERVER object_name |
  TABLE object_name |
  TABLESPACE object_name |
  TEXT SEARCH CONFIGURATION object_name |
  TEXT SEARCH DICTIONARY object_name |
  TEXT SEARCH PARSER object_name |
  TEXT SEARCH TEMPLATE object_name |
  TYPE object_name |
  VIEW object_name
}
   IS 'text';
```
#### 参数说明
表1COMMENT参数说明 
| 参数                                           | 描述                                            | 取值范围       |
|:---|:---|:---|
| agg_name                                     | 需要注释的聚集函数的名称。                                 | -          |
| agg_type                                     | 聚集函数参数的类型。                                    | -          |
| source_type                                  | 类型转换的源数据类型。                                   | -          |
| target_type                                  | 类型转换的目标数据类型。                                  | -          |
| object_name                                  | 对象的名称。                                        | -          |
| table_name.column_name/view_name.column_name | 定义/修改注释的列名称。前缀可加表名称或者视图名称。                    | -          |
| constraint_name                              | 定义/修改注释的表约束的名称。                               | 已存在的表约束名称。 |
| table_name                                   | 表名称。                                          | 已存在的表名称。   |
| function_name                                | 定义/修改注释的函数名称。                                 | 已存在的函数名称。  |
| argmode/argname/argtype                      | 函数参数的模式、名称、类型。                                | -          |
| large_object_oid                             | 定义/修改注释的大对象的OID。                              | -          |
| operator_name                                | 操作符名称。                                        | -          |
| left_type/right_type                         | 操作参数的数据类型（可以用模式指定）。当前置或者后置操作符不存在时，可以增加NONE选项。 | -          |
| text                                         | 新注释。                                          | 字符串。       |
   
#### 示例
创建示例表customer，并在表customer的customer.c_custkey列上添加注释。
```
DROP TABLE IF EXISTS customer;
CREATE TABLE customer
(    
    c_custkey     BIGINT NOT NULL CONSTRAINT c_custkey PRIMARY KEY  , 
    c_name        VARCHAR(25)  , 
    c_address     VARCHAR(40)  , 
    c_nationkey   INT          , 
    c_phone       CHAR(15)     , 
    c_acctbal     DECIMAL(15,2)  
)
DISTRIBUTE BY HASH(c_custkey);
COMMENT ON COLUMN customer.c_custkey IS 'Primary key of customer demographics table.';
```
创建视图customer_details_view并给视图添加注释。
```
CREATE OR REPLACE VIEW customer_details_view AS SELECT * FROM customer;
COMMENT ON VIEW customer_details_view IS 'View of customer detail';
```
给表customer添加注释。
```
COMMENT ON TABLE customer IS 'This is my table';
```
