{"Entry":{"collection":"sql","key":"comment","name":"COMMENT","aliases":["comment"],"metadata":{"aliases":["comment"],"changed_in":["7.2","7.3","7.4","8.0","8.1","8.2","8.3","9.0","9.1","9.3","9.4","9.5","9.6","10","11"],"changes":[{"from":"6.5","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":[],"removed":[]},"status":"added","synopsis":null,"to":"7.0"},{"from":"7.0","purpose_changed":false,"renamed":{"from_file":"sql-comment.htm","to_file":"sql-comment.html"},"sections":{"added":[],"changed":["description","usage"],"removed":[]},"status":"changed","synopsis":null,"to":"7.1"},{"from":"7.1","purpose_changed":true,"renamed":null,"sections":{"added":[],"changed":["description"],"removed":[]},"status":"changed","synopsis":{"added":["AGGREGATE agg_name (agg_type) |"],"removed":[]},"to":"7.2"},{"from":"7.2","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description","usage"],"removed":[]},"status":"changed","synopsis":{"added":["CONSTRAINT constraint_name ON table_name |","DATABASE object_name |","DOMAIN object_name |","FUNCTION func_name (arg1_type, arg2_type, ...) |","INDEX object_name |","OPERATOR op (leftoperand_type, rightoperand_type) |","RULE rule_name ON table_name |","SCHEMA object_name |","SEQUENCE object_name |","TRIGGER trigger_name ON table_name |","TYPE object_name |","VIEW object_name"],"removed":["[ DATABASE | INDEX | RULE | SEQUENCE | TABLE | TYPE | VIEW ] object_name |","FUNCTION func_name (arg1, arg2, ...) |"]},"to":"7.3"},{"from":"7.3","purpose_changed":false,"renamed":null,"sections":{"added":["parameters","notes","examples"],"changed":["description","compatibility"],"removed":["usage"]},"status":"changed","synopsis":{"added":["{","} IS 'text'"],"removed":["[","] IS 'text'"]},"to":"7.4"},{"from":"7.4","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description","parameters","notes","examples"],"removed":[]},"status":"changed","synopsis":{"added":["CAST (sourcetype AS targettype) |","CONSTRAINT constraint_name ON table_name |","CONVERSION object_name |","LARGE OBJECT large_object_oid |","OPERATOR op (leftoperand_type, rightoperand_type) |","OPERATOR CLASS object_name USING index_method |","[ PROCEDURAL ] LANGUAGE object_name |"],"removed":[]},"to":"8.0"},{"from":"8.0","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["parameters","examples"],"removed":[]},"status":"changed","synopsis":{"added":["FUNCTION func_name ( [ [ argmode ] [ argname ] argtype [, ...] ] ) |"],"removed":["FUNCTION func_name (arg1_type, arg2_type, ...) |"]},"to":"8.1"},{"from":"8.1","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description","parameters","notes","examples"],"removed":[]},"status":"changed","synopsis":{"added":["AGGREGATE agg_name (agg_type [, ...] ) |","ROLE object_name |","SEQUENCE object_name |","TABLESPACE object_name |"],"removed":[]},"to":"8.2"},{"from":"8.2","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description","parameters","examples"],"removed":[]},"status":"changed","synopsis":{"added":["OPERATOR FAMILY object_name USING index_method |","TEXT SEARCH CONFIGURATION object_name |","TEXT SEARCH DICTIONARY object_name |","TEXT SEARCH PARSER object_name |","TEXT SEARCH TEMPLATE object_name |"],"removed":[]},"to":"8.3"},{"from":"8.3","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description","parameters"],"removed":[]},"status":"changed","synopsis":null,"to":"8.4"},{"from":"8.4","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description","parameters","examples"],"removed":[]},"status":"changed","synopsis":{"added":["CAST (source_type AS target_type) |","COLUMN relation_name.column_name |","FUNCTION function_name ( [ [ argmode ] [ argname ] argtype [, ...] ] ) |","OPERATOR operator_name (left_type, right_type) |"],"removed":["TABLE object_name |","COLUMN table_name.column_name |","CAST (sourcetype AS targettype) |","FUNCTION func_name ( [ [ argmode ] [ argname ] argtype [, ...] ] ) |","OPERATOR op (leftoperand_type, rightoperand_type) |"]},"to":"9.0"},{"from":"9.0","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description","parameters","notes","examples"],"removed":[]},"status":"changed","synopsis":{"added":["COLLATION object_name |","DOMAIN object_name |","EXTENSION object_name |","FOREIGN DATA WRAPPER object_name |","FOREIGN TABLE object_name |","SERVER object_name |","TABLE object_name |"],"removed":["TABLE object_name |"]},"to":"9.1"},{"from":"9.1","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description"],"removed":[]},"status":"changed","synopsis":null,"to":"9.2"},{"from":"9.2","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description","examples"],"removed":[]},"status":"changed","synopsis":{"added":["EVENT TRIGGER object_name |","LARGE OBJECT large_object_oid |","MATERIALIZED VIEW object_name |"],"removed":[]},"to":"9.3"},{"from":"9.3","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description","parameters"],"removed":[]},"status":"changed","synopsis":{"added":["AGGREGATE aggregate_name ( aggregate_signature ) |","* |","[ argmode ] [ argname ] argtype [ , ... ] |","[ [ argmode ] [ argname ] argtype [ , ... ] ] ORDER BY [ argmode ] [ argname ] argtype [ , ... ]"],"removed":["AGGREGATE agg_name (agg_type [, ...] ) |"]},"to":"9.4"},{"from":"9.4","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description","parameters","examples"],"removed":[]},"status":"changed","synopsis":{"added":["CONSTRAINT constraint_name ON table_name |","CONSTRAINT constraint_name ON DOMAIN domain_name |","POLICY policy_name ON table_name |","TEXT SEARCH TEMPLATE object_name |","TRANSFORM FOR type_name LANGUAGE lang_name |"],"removed":[]},"to":"9.5"},{"from":"9.5","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description","examples"],"removed":[]},"status":"changed","synopsis":{"added":["ACCESS METHOD object_name |"],"removed":[]},"to":"9.6"},{"from":"9.6","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description","parameters","examples"],"removed":[]},"status":"changed","synopsis":{"added":["FUNCTION function_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |","PUBLICATION object_name |","SERVER object_name |","STATISTICS object_name |","SUBSCRIPTION object_name |"],"removed":[]},"to":"10"},{"from":"10","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["parameters","examples"],"removed":[]},"status":"changed","synopsis":{"added":["PROCEDURE procedure_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |","ROLE object_name |","ROUTINE routine_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |","} IS { string_literal | NULL }"],"removed":["} IS 'text'"]},"to":"11"},{"from":"11","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description"],"removed":[]},"status":"changed","synopsis":null,"to":"12"},{"from":"13","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description","parameters","examples"],"removed":[]},"status":"changed","synopsis":null,"to":"14"},{"from":"14","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description","examples"],"removed":[]},"status":"changed","synopsis":null,"to":"15"},{"from":"15","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description"],"removed":[]},"status":"changed","synopsis":null,"to":"16"},{"from":"16","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description"],"removed":[]},"status":"changed","synopsis":null,"to":"17"},{"from":"17","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description"],"removed":[]},"status":"changed","synopsis":null,"to":"18"},{"from":"18","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description"],"removed":[]},"status":"changed","synopsis":null,"to":"19"}],"content_hash":"8f94c7e38b7fe87c1d975e97c714e1481be8fa32129a222ee6fcabf146c2fa21","editorial":{},"first_version":"7.0","group":"misc","imported_at":"2026-09-27T17:57:27.454369+08:00","last_version":"20","name":"COMMENT","object":"","position":16000,"present_in":["7.0","7.1","7.2","7.3","7.4","8.0","8.1","8.2","8.3","8.4","9.0","9.1","9.2","9.3","9.4","9.5","9.6","10","11","12","13","14","15","16","17","18","19","20"],"purpose":"define or change the comment of an object","purpose_zh":"","related":[],"slug":"comment","source_rev":"b7bd9cda","synopsis":"COMMENT ON\n{\nACCESS METHOD object_name |\nAGGREGATE aggregate_name ( aggregate_signature ) |\nCAST (source_type AS target_type) |\nCOLLATION object_name |\nCOLUMN relation_name.column_name |\nCONSTRAINT constraint_name ON table_name |\nCONSTRAINT constraint_name ON DOMAIN domain_name |\nCONVERSION object_name |\nDATABASE object_name |\nDOMAIN object_name |\nEXTENSION object_name |\nEVENT TRIGGER object_name |\nFOREIGN DATA WRAPPER object_name |\nFOREIGN TABLE object_name |\nFUNCTION function_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |\nINDEX object_name |\nLARGE OBJECT large_object_oid |\nMATERIALIZED VIEW object_name |\nOPERATOR operator_name (left_type, right_type) |\nOPERATOR CLASS object_name USING index_method |\nOPERATOR FAMILY object_name USING index_method |\nPOLICY policy_name ON table_name |\n[ PROCEDURAL ] LANGUAGE object_name |\nPROCEDURE procedure_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |\nPUBLICATION object_name |\nROLE object_name |\nROUTINE routine_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |\nRULE rule_name ON table_name |\nSCHEMA object_name |\nSEQUENCE object_name |\nSERVER object_name |\nSTATISTICS object_name |\nSUBSCRIPTION object_name |\nTABLE object_name |\nTABLESPACE object_name |\nTEXT SEARCH CONFIGURATION object_name |\nTEXT SEARCH DICTIONARY object_name |\nTEXT SEARCH PARSER object_name |\nTEXT SEARCH TEMPLATE object_name |\nTRANSFORM FOR type_name LANGUAGE lang_name |\nTRIGGER trigger_name ON table_name |\nTYPE object_name |\nVIEW object_name\n} IS { string_literal | NULL }\n\nwhere aggregate_signature is:\n\n* |\n[ argmode ] [ argname ] argtype [ , ... ] |\n[ [ argmode ] [ argname ] argtype [ , ... ] ] ORDER BY [ argmode ] [ argname ] argtype [ , ... ]","verb":"COMMENT"}},"Definition":{"Collection":"sql","Key":"comment","SourceDatabase":"center","Version":"18","SourceTable":"sqlcmd","SourceKey":"comment","SourceRevision":"b7bd9cda","Facts":{"anchor":"SQL-COMMENT","file":"sql-comment.html","lang":"en","name":"COMMENT","purpose":"define or change the comment of an object","purpose_zh":"","related":[],"sections":[{"html":"\u003cp\u003e\u003ccode class=\"command\"\u003eCOMMENT\u003c/code\u003e stores, replaces, or removes the comment on a database object.\u003c/p\u003e\u003cp\u003eOnly one comment string is stored for each object. Issuing a new \u003ccode class=\"command\"\u003eCOMMENT\u003c/code\u003e command for the same object replaces the existing comment. Specifying \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e or an empty string (\u003ccode class=\"literal\"\u003e''\u003c/code\u003e) removes the comment. Comments are automatically dropped when their object is dropped.\u003c/p\u003e\u003cp\u003eA \u003ccode class=\"literal\"\u003eSHARE UPDATE EXCLUSIVE\u003c/code\u003e lock is acquired on the object to be commented.\u003c/p\u003e\u003cp\u003eFor most kinds of object, only the object's owner can set the comment. Roles don't have owners, so the rule for \u003ccode class=\"literal\"\u003eCOMMENT ON ROLE\u003c/code\u003e is that you must be superuser to comment on a superuser role, or have the \u003ccode class=\"literal\"\u003eCREATEROLE\u003c/code\u003e privilege and have been granted \u003ccode class=\"literal\"\u003eADMIN OPTION\u003c/code\u003e on the target role. Likewise, access methods don't have owners either; you must be superuser to comment on an access method. Of course, a superuser can comment on anything.\u003c/p\u003e\u003cp\u003eComments can be viewed using \u003cspan class=\"application\"\u003epsql\u003c/span\u003e's \u003ccode class=\"command\"\u003e\\d\u003c/code\u003e family of commands. Other user interfaces to retrieve comments can be built atop the same built-in functions that \u003cspan class=\"application\"\u003epsql\u003c/span\u003e uses, namely \u003ccode class=\"function\"\u003eobj_description\u003c/code\u003e, \u003ccode class=\"function\"\u003ecol_description\u003c/code\u003e, and \u003ccode class=\"function\"\u003eshobj_description\u003c/code\u003e (see \u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-COMMENT-TABLE\" title=\"Table 9.82. Comment Information Functions\"\u003eTable 9.82\u003c/a\u003e).\u003c/p\u003e","key":"description","title":"Description"},{"html":"\u003cdiv class=\"variablelist\"\u003e\u003cdl class=\"variablelist\"\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003erelation_name\u003c/code\u003e\u003c/em\u003e.\u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eaggregate_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003econstraint_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003efunction_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eoperator_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003epolicy_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eprocedure_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eroutine_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003erule_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003etrigger_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe name of the object to be commented. Names of objects that reside in schemas (tables, functions, etc.) can be schema-qualified. When commenting on a column, \u003cem class=\"replaceable\"\u003e\u003ccode\u003erelation_name\u003c/code\u003e\u003c/em\u003e must refer to a table, view, composite type, or foreign table.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003etable_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003edomain_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eWhen creating a comment on a constraint, a trigger, a rule or a policy these parameters specify the name of the table or domain on which that object is defined.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003esource_type\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe name of the source data type of the cast.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003etarget_type\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe name of the target data type of the cast.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe mode of a function, procedure, or aggregate argument: \u003ccode class=\"literal\"\u003eIN\u003c/code\u003e, \u003ccode class=\"literal\"\u003eOUT\u003c/code\u003e, \u003ccode class=\"literal\"\u003eINOUT\u003c/code\u003e, or \u003ccode class=\"literal\"\u003eVARIADIC\u003c/code\u003e. If omitted, the default is \u003ccode class=\"literal\"\u003eIN\u003c/code\u003e. Note that \u003ccode class=\"command\"\u003eCOMMENT\u003c/code\u003e does not actually pay any attention to \u003ccode class=\"literal\"\u003eOUT\u003c/code\u003e arguments, since only the input arguments are needed to determine the function's identity. So it is sufficient to list the \u003ccode class=\"literal\"\u003eIN\u003c/code\u003e, \u003ccode class=\"literal\"\u003eINOUT\u003c/code\u003e, and \u003ccode class=\"literal\"\u003eVARIADIC\u003c/code\u003e arguments.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe name of a function, procedure, or aggregate argument. Note that \u003ccode class=\"command\"\u003eCOMMENT\u003c/code\u003e does not actually pay any attention to argument names, since only the argument data types are needed to determine the function's identity.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe data type of a function, procedure, or aggregate argument.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003elarge_object_oid\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe OID of the large object.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eleft_type\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eright_type\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe data type(s) of the operator's arguments (optionally schema-qualified). Write \u003ccode class=\"literal\"\u003eNONE\u003c/code\u003e for the missing argument of a prefix operator.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003ePROCEDURAL\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThis is a noise word.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003etype_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe name of the data type of the transform.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003elang_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe name of the language of the transform.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003estring_literal\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe new comment contents, written as a string literal. An empty string (\u003ccode class=\"literal\"\u003e''\u003c/code\u003e) removes the comment.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eWrite \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e to remove the comment.\u003c/p\u003e\u003c/dd\u003e\u003c/dl\u003e\u003c/div\u003e","key":"parameters","title":"Parameters"},{"html":"\u003cp\u003eThere is presently no security mechanism for viewing comments: any user connected to a database can see all the comments for objects in that database. For shared objects such as databases, roles, and tablespaces, comments are stored globally so any user connected to any database in the cluster can see all the comments for shared objects. Therefore, don't put security-critical information in comments.\u003c/p\u003e","key":"notes","title":"Notes"},{"html":"\u003cp\u003eAttach a comment to the table \u003ccode class=\"literal\"\u003emytable\u003c/code\u003e:\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eCOMMENT ON TABLE mytable IS 'This is my table.';\n\u003c/pre\u003e\u003cp\u003eRemove it again:\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eCOMMENT ON TABLE mytable IS NULL;\n\u003c/pre\u003e\u003cp\u003eSome more examples:\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eCOMMENT ON ACCESS METHOD gin IS 'GIN index access method';\nCOMMENT ON AGGREGATE my_aggregate (double precision) IS 'Computes sample variance';\nCOMMENT ON CAST (text AS int4) IS 'Allow casts from text to int4';\nCOMMENT ON COLLATION \"fr_CA\" IS 'Canadian French';\nCOMMENT ON COLUMN my_table.my_column IS 'Employee ID number';\nCOMMENT ON CONVERSION my_conv IS 'Conversion to UTF8';\nCOMMENT ON CONSTRAINT bar_col_cons ON bar IS 'Constrains column col';\nCOMMENT ON CONSTRAINT dom_col_constr ON DOMAIN dom IS 'Constrains col of domain';\nCOMMENT ON DATABASE my_database IS 'Development Database';\nCOMMENT ON DOMAIN my_domain IS 'Email Address Domain';\nCOMMENT ON EVENT TRIGGER abort_ddl IS 'Aborts all DDL commands';\nCOMMENT ON EXTENSION hstore IS 'implements the hstore data type';\nCOMMENT ON FOREIGN DATA WRAPPER mywrapper IS 'my foreign data wrapper';\nCOMMENT ON FOREIGN TABLE my_foreign_table IS 'Employee Information in other database';\nCOMMENT ON FUNCTION my_function (timestamp) IS 'Returns Roman Numeral';\nCOMMENT ON INDEX my_index IS 'Enforces uniqueness on employee ID';\nCOMMENT ON LANGUAGE plpython IS 'Python support for stored procedures';\nCOMMENT ON LARGE OBJECT 346344 IS 'Planning document';\nCOMMENT ON MATERIALIZED VIEW my_matview IS 'Summary of order history';\nCOMMENT ON OPERATOR ^ (text, text) IS 'Performs intersection of two texts';\nCOMMENT ON OPERATOR - (NONE, integer) IS 'Unary minus';\nCOMMENT ON OPERATOR CLASS int4ops USING btree IS '4 byte integer operators for btrees';\nCOMMENT ON OPERATOR FAMILY integer_ops USING btree IS 'all integer operators for btrees';\nCOMMENT ON POLICY my_policy ON mytable IS 'Filter rows by users';\nCOMMENT ON PROCEDURE my_proc (integer, integer) IS 'Runs a report';\nCOMMENT ON PUBLICATION alltables IS 'Publishes all operations on all tables';\nCOMMENT ON ROLE my_role IS 'Administration group for finance tables';\nCOMMENT ON ROUTINE my_routine (integer, integer) IS 'Runs a routine (which is a function or procedure)';\nCOMMENT ON RULE my_rule ON my_table IS 'Logs updates of employee records';\nCOMMENT ON SCHEMA my_schema IS 'Departmental data';\nCOMMENT ON SEQUENCE my_sequence IS 'Used to generate primary keys';\nCOMMENT ON SERVER myserver IS 'my foreign server';\nCOMMENT ON STATISTICS my_statistics IS 'Improves planner row estimations';\nCOMMENT ON SUBSCRIPTION alltables IS 'Subscription for all operations on all tables';\nCOMMENT ON TABLE my_schema.my_table IS 'Employee Information';\nCOMMENT ON TABLESPACE my_tablespace IS 'Tablespace for indexes';\nCOMMENT ON TEXT SEARCH CONFIGURATION my_config IS 'Special word filtering';\nCOMMENT ON TEXT SEARCH DICTIONARY swedish IS 'Snowball stemmer for Swedish language';\nCOMMENT ON TEXT SEARCH PARSER my_parser IS 'Splits text into words';\nCOMMENT ON TEXT SEARCH TEMPLATE snowball IS 'Snowball stemmer';\nCOMMENT ON TRANSFORM FOR hstore LANGUAGE plpython3u IS 'Transform between hstore and Python dict';\nCOMMENT ON TRIGGER my_trigger ON my_table IS 'Used for RI';\nCOMMENT ON TYPE complex IS 'Complex number data type';\nCOMMENT ON VIEW my_view IS 'View of departmental costs';\nCOMMENT ON VIEW my_view IS NULL;\n\u003c/pre\u003e","key":"examples","title":"Examples"},{"html":"\u003cp\u003eThere is no \u003ccode class=\"command\"\u003eCOMMENT\u003c/code\u003e command in the SQL standard.\u003c/p\u003e","key":"compatibility","title":"Compatibility"}],"sections_same_as":"","slug":"18","synopsis_html":"COMMENT ON\n{\n  ACCESS METHOD \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  AGGREGATE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eaggregate_name\u003c/code\u003e\u003c/em\u003e ( \u003cem class=\"replaceable\"\u003e\u003ccode\u003eaggregate_signature\u003c/code\u003e\u003c/em\u003e ) |\n  CAST (\u003cem class=\"replaceable\"\u003e\u003ccode\u003esource_type\u003c/code\u003e\u003c/em\u003e AS \u003cem class=\"replaceable\"\u003e\u003ccode\u003etarget_type\u003c/code\u003e\u003c/em\u003e) |\n  COLLATION \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  COLUMN \u003cem class=\"replaceable\"\u003e\u003ccode\u003erelation_name\u003c/code\u003e\u003c/em\u003e.\u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e |\n  CONSTRAINT \u003cem class=\"replaceable\"\u003e\u003ccode\u003econstraint_name\u003c/code\u003e\u003c/em\u003e ON \u003cem class=\"replaceable\"\u003e\u003ccode\u003etable_name\u003c/code\u003e\u003c/em\u003e |\n  CONSTRAINT \u003cem class=\"replaceable\"\u003e\u003ccode\u003econstraint_name\u003c/code\u003e\u003c/em\u003e ON DOMAIN \u003cem class=\"replaceable\"\u003e\u003ccode\u003edomain_name\u003c/code\u003e\u003c/em\u003e |\n  CONVERSION \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  DATABASE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  DOMAIN \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  EXTENSION \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  EVENT TRIGGER \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  FOREIGN DATA WRAPPER \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  FOREIGN TABLE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  FUNCTION \u003cem class=\"replaceable\"\u003e\u003ccode\u003efunction_name\u003c/code\u003e\u003c/em\u003e [ ( [ [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e ] [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e [, ...] ] ) ] |\n  INDEX \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  LARGE OBJECT \u003cem class=\"replaceable\"\u003e\u003ccode\u003elarge_object_oid\u003c/code\u003e\u003c/em\u003e |\n  MATERIALIZED VIEW \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  OPERATOR \u003cem class=\"replaceable\"\u003e\u003ccode\u003eoperator_name\u003c/code\u003e\u003c/em\u003e (\u003cem class=\"replaceable\"\u003e\u003ccode\u003eleft_type\u003c/code\u003e\u003c/em\u003e, \u003cem class=\"replaceable\"\u003e\u003ccode\u003eright_type\u003c/code\u003e\u003c/em\u003e) |\n  OPERATOR CLASS \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e USING \u003cem class=\"replaceable\"\u003e\u003ccode\u003eindex_method\u003c/code\u003e\u003c/em\u003e |\n  OPERATOR FAMILY \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e USING \u003cem class=\"replaceable\"\u003e\u003ccode\u003eindex_method\u003c/code\u003e\u003c/em\u003e |\n  POLICY \u003cem class=\"replaceable\"\u003e\u003ccode\u003epolicy_name\u003c/code\u003e\u003c/em\u003e ON \u003cem class=\"replaceable\"\u003e\u003ccode\u003etable_name\u003c/code\u003e\u003c/em\u003e |\n  [ PROCEDURAL ] LANGUAGE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  PROCEDURE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eprocedure_name\u003c/code\u003e\u003c/em\u003e [ ( [ [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e ] [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e [, ...] ] ) ] |\n  PUBLICATION \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  ROLE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  ROUTINE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eroutine_name\u003c/code\u003e\u003c/em\u003e [ ( [ [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e ] [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e [, ...] ] ) ] |\n  RULE \u003cem class=\"replaceable\"\u003e\u003ccode\u003erule_name\u003c/code\u003e\u003c/em\u003e ON \u003cem class=\"replaceable\"\u003e\u003ccode\u003etable_name\u003c/code\u003e\u003c/em\u003e |\n  SCHEMA \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  SEQUENCE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  SERVER \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  STATISTICS \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  SUBSCRIPTION \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  TABLE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  TABLESPACE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  TEXT SEARCH CONFIGURATION \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  TEXT SEARCH DICTIONARY \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  TEXT SEARCH PARSER \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  TEXT SEARCH TEMPLATE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  TRANSFORM FOR \u003cem class=\"replaceable\"\u003e\u003ccode\u003etype_name\u003c/code\u003e\u003c/em\u003e LANGUAGE \u003cem class=\"replaceable\"\u003e\u003ccode\u003elang_name\u003c/code\u003e\u003c/em\u003e |\n  TRIGGER \u003cem class=\"replaceable\"\u003e\u003ccode\u003etrigger_name\u003c/code\u003e\u003c/em\u003e ON \u003cem class=\"replaceable\"\u003e\u003ccode\u003etable_name\u003c/code\u003e\u003c/em\u003e |\n  TYPE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  VIEW \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e\n} IS { \u003cem class=\"replaceable\"\u003e\u003ccode\u003estring_literal\u003c/code\u003e\u003c/em\u003e | NULL }\n\n\u003cspan class=\"phrase\"\u003ewhere \u003cem class=\"replaceable\"\u003e\u003ccode\u003eaggregate_signature\u003c/code\u003e\u003c/em\u003e is:\u003c/span\u003e\n\n* |\n[ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e ] [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e [ , ... ] |\n[ [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e ] [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e [ , ... ] ] ORDER BY [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e ] [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e [ , ... ]","synopsis_text":"COMMENT ON\n{\nACCESS METHOD object_name |\nAGGREGATE aggregate_name ( aggregate_signature ) |\nCAST (source_type AS target_type) |\nCOLLATION object_name |\nCOLUMN relation_name.column_name |\nCONSTRAINT constraint_name ON table_name |\nCONSTRAINT constraint_name ON DOMAIN domain_name |\nCONVERSION object_name |\nDATABASE object_name |\nDOMAIN object_name |\nEXTENSION object_name |\nEVENT TRIGGER object_name |\nFOREIGN DATA WRAPPER object_name |\nFOREIGN TABLE object_name |\nFUNCTION function_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |\nINDEX object_name |\nLARGE OBJECT large_object_oid |\nMATERIALIZED VIEW object_name |\nOPERATOR operator_name (left_type, right_type) |\nOPERATOR CLASS object_name USING index_method |\nOPERATOR FAMILY object_name USING index_method |\nPOLICY policy_name ON table_name |\n[ PROCEDURAL ] LANGUAGE object_name |\nPROCEDURE procedure_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |\nPUBLICATION object_name |\nROLE object_name |\nROUTINE routine_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |\nRULE rule_name ON table_name |\nSCHEMA object_name |\nSEQUENCE object_name |\nSERVER object_name |\nSTATISTICS object_name |\nSUBSCRIPTION object_name |\nTABLE object_name |\nTABLESPACE object_name |\nTEXT SEARCH CONFIGURATION object_name |\nTEXT SEARCH DICTIONARY object_name |\nTEXT SEARCH PARSER object_name |\nTEXT SEARCH TEMPLATE object_name |\nTRANSFORM FOR type_name LANGUAGE lang_name |\nTRIGGER trigger_name ON table_name |\nTYPE object_name |\nVIEW object_name\n} IS { string_literal | NULL }\n\nwhere aggregate_signature is:\n\n* |\n[ argmode ] [ argname ] argtype [ , ... ] |\n[ [ argmode ] [ argname ] argtype [ , ... ] ] ORDER BY [ argmode ] [ argname ] argtype [ , ... ]"},"ManualEvidence":{},"MeasuredEvidence":{}},"Text":{"Collection":"sql","Key":"comment","SourceDatabase":"pgweb","Version":"18","Locale":"zh-Hans","Title":"COMMENT","Summary":"定义或修改对象的注释","BodyHTML":"\u003cpre\u003eCOMMENT ON\n{\nACCESS METHOD object_name |\nAGGREGATE aggregate_name ( aggregate_signature ) |\nCAST (source_type AS target_type) |\nCOLLATION object_name |\nCOLUMN relation_name.column_name |\nCONSTRAINT constraint_name ON table_name |\nCONSTRAINT constraint_name ON DOMAIN domain_name |\nCONVERSION object_name |\nDATABASE object_name |\nDOMAIN object_name |\nEXTENSION object_name |\nEVENT TRIGGER object_name |\nFOREIGN DATA WRAPPER object_name |\nFOREIGN TABLE object_name |\nFUNCTION function_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |\nINDEX object_name |\nLARGE OBJECT large_object_oid |\nMATERIALIZED VIEW object_name |\nOPERATOR operator_name (left_type, right_type) |\nOPERATOR CLASS object_name USING index_method |\nOPERATOR FAMILY object_name USING index_method |\nPOLICY policy_name ON table_name |\n[ PROCEDURAL ] LANGUAGE object_name |\nPROCEDURE procedure_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |\nPUBLICATION object_name |\nROLE object_name |\nROUTINE routine_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |\nRULE rule_name ON table_name |\nSCHEMA object_name |\nSEQUENCE object_name |\nSERVER object_name |\nSTATISTICS object_name |\nSUBSCRIPTION object_name |\nTABLE object_name |\nTABLESPACE object_name |\nTEXT SEARCH CONFIGURATION object_name |\nTEXT SEARCH DICTIONARY object_name |\nTEXT SEARCH PARSER object_name |\nTEXT SEARCH TEMPLATE object_name |\nTRANSFORM FOR type_name LANGUAGE lang_name |\nTRIGGER trigger_name ON table_name |\nTYPE object_name |\nVIEW object_name\n} IS { string_literal | NULL }\n\n其中 aggregate_signature 是：\n\n* |\n[ argmode ] [ argname ] argtype [ , ... ] |\n[ [ argmode ] [ argname ] argtype [ , ... ] ] ORDER BY [ argmode ] [ argname ] argtype [ , ... ]\u003c/pre\u003e\u003csection\u003e\u003ch2\u003e描述\u003c/h2\u003e\u003cp\u003e\u003ccode\u003eCOMMENT\u003c/code\u003e用于存储、替换或移除数据库对象上的注释。\u003c/p\u003e\u003cp\u003e每个对象只存储一个注释字符串。对同一对象发出新的 \u003ccode\u003eCOMMENT\u003c/code\u003e命令会替换现有注释。指定 \u003ccode\u003eNULL\u003c/code\u003e或空字符串（\u003ccode\u003e\u0026#39;\u0026#39;\u003c/code\u003e）会移除注释。当对象被删除时，其注释也会自动删除。\u003c/p\u003e\u003cp\u003e将在要添加注释的对象上获取一个\u003ccode\u003eSHARE UPDATE EXCLUSIVE\u003c/code\u003e锁。\u003c/p\u003e\u003cp\u003e对于大多数对象类型，只有对象的拥有者才能设置注释。角色没有拥有者，因此 \u003ccode\u003eCOMMENT ON ROLE\u003c/code\u003e的规则是：若要为超级用户角色添加注释，你必须是超级用户；否则，你必须拥有\u003ccode\u003eCREATEROLE\u003c/code\u003e权限，并且在目标角色上已获授 \u003ccode\u003eADMIN OPTION\u003c/code\u003e。同样，访问方法也没有拥有者；要为访问方法添加注释，你必须是超级用户。当然，超级用户可以为任何对象添加注释。\u003c/p\u003e\u003cp\u003e可以使用\u003cspan\u003epsql\u003c/span\u003e的\u003ccode\u003e\\d\u003c/code\u003e 系列命令查看这些注释。其他用于检索注释的用户界面，也可以建立在 \u003cspan\u003epsql\u003c/span\u003e使用的同一组内置函数之上，即 \u003ccode\u003eobj_description\u003c/code\u003e、\u003ccode\u003ecol_description\u003c/code\u003e 和\u003ccode\u003eshobj_description\u003c/code\u003e（见\u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-COMMENT-TABLE\" rel=\"nofollow\"\u003e表 9.82\u003c/a\u003e）。\u003c/p\u003e\u003c/section\u003e\u003csection\u003e\u003ch2\u003e参数\u003c/h2\u003e\u003cdiv\u003e\u003cdl\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003erelation_name\u003c/code\u003e\u003c/em\u003e.\u003cem\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003eaggregate_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003econstraint_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003efunction_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003eoperator_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003epolicy_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003eprocedure_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003eroutine_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003erule_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003etrigger_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e要添加注释的对象名称。位于模式中的对象（表、函数等）的名称可以带模式限定。为列添加注释时，\u003cem\u003e\u003ccode\u003erelation_name\u003c/code\u003e\u003c/em\u003e必须引用一个表、视图、复合类型或外部表。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003etable_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003edomain_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e当为约束、触发器、规则或策略创建注释时，这些参数指定定义该对象的表或域的名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003esource_type\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该类型转换的源数据类型的名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003etarget_type\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该类型转换的目标数据类型的名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e函数、过程或聚合函数参数的模式：\u003ccode\u003eIN\u003c/code\u003e、\u003ccode\u003eOUT\u003c/code\u003e、\u003ccode\u003eINOUT\u003c/code\u003e或\u003ccode\u003eVARIADIC\u003c/code\u003e。如果省略，默认值是\u003ccode\u003eIN\u003c/code\u003e。注意\u003ccode\u003eCOMMENT\u003c/code\u003e 实际上并不关心\u003ccode\u003eOUT\u003c/code\u003e参数，因为确定函数标识只需要输入参数。因此，列出\u003ccode\u003eIN\u003c/code\u003e、\u003ccode\u003eINOUT\u003c/code\u003e和\u003ccode\u003eVARIADIC\u003c/code\u003e 参数就足够了。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e函数、过程或聚合函数参数的名称。注意\u003ccode\u003eCOMMENT\u003c/code\u003e 实际上并不关心参数名称，因为确定函数标识只需要参数数据类型。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e函数、过程或聚合函数参数的数据类型。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003elarge_object_oid\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e大对象的 OID。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003eleft_type\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003eright_type\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e操作符参数的数据类型（可以是模式限定的）。对于前缀操作符缺失的参数，请写成\u003ccode\u003eNONE\u003c/code\u003e。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003ePROCEDURAL\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e这是一个噪声词。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003etype_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该转换的数据类型名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003elang_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该转换所用语言的名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003estring_literal\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e新的注释内容，以字符串字面量形式写成。空字符串（\u003ccode\u003e\u0026#39;\u0026#39;\u003c/code\u003e）会移除该注释。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eNULL\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e写入\u003ccode\u003eNULL\u003c/code\u003e以移除该注释。\u003c/p\u003e\u003c/dd\u003e\u003c/dl\u003e\u003c/div\u003e\u003c/section\u003e\u003csection\u003e\u003ch2\u003e注解\u003c/h2\u003e\u003cp\u003e目前没有用于查看注释的安全机制：任何连接到某个数据库的用户都可以看到该数据库中所有对象的注释。对于数据库、角色和表空间这类共享对象，注释是全局存储的，因此连接到集簇中任一数据库的任何用户都可以看到共享对象的全部注释。因此，不要在注释中放入与安全密切相关的信息。\u003c/p\u003e\u003c/section\u003e\u003csection\u003e\u003ch2\u003e示例\u003c/h2\u003e\u003cp\u003e为表\u003ccode\u003emytable\u003c/code\u003e附加一条注释：\u003c/p\u003e\u003cpre\u003eCOMMENT ON TABLE mytable IS \u0026#39;This is my table.\u0026#39;;\n\u003c/pre\u003e\u003cp\u003e再将其移除：\u003c/p\u003e\u003cpre\u003eCOMMENT ON TABLE mytable IS NULL;\n\u003c/pre\u003e\u003cp\u003e更多示例：\u003c/p\u003e\u003cpre\u003eCOMMENT ON ACCESS METHOD gin IS \u0026#39;GIN index access method\u0026#39;;\nCOMMENT ON AGGREGATE my_aggregate (double precision) IS \u0026#39;Computes sample variance\u0026#39;;\nCOMMENT ON CAST (text AS int4) IS \u0026#39;Allow casts from text to int4\u0026#39;;\nCOMMENT ON COLLATION \u0026#34;fr_CA\u0026#34; IS \u0026#39;Canadian French\u0026#39;;\nCOMMENT ON COLUMN my_table.my_column IS \u0026#39;Employee ID number\u0026#39;;\nCOMMENT ON CONVERSION my_conv IS \u0026#39;Conversion to UTF8\u0026#39;;\nCOMMENT ON CONSTRAINT bar_col_cons ON bar IS \u0026#39;Constrains column col\u0026#39;;\nCOMMENT ON CONSTRAINT dom_col_constr ON DOMAIN dom IS \u0026#39;Constrains col of domain\u0026#39;;\nCOMMENT ON DATABASE my_database IS \u0026#39;Development Database\u0026#39;;\nCOMMENT ON DOMAIN my_domain IS \u0026#39;Email Address Domain\u0026#39;;\nCOMMENT ON EVENT TRIGGER abort_ddl IS \u0026#39;Aborts all DDL commands\u0026#39;;\nCOMMENT ON EXTENSION hstore IS \u0026#39;implements the hstore data type\u0026#39;;\nCOMMENT ON FOREIGN DATA WRAPPER mywrapper IS \u0026#39;my foreign data wrapper\u0026#39;;\nCOMMENT ON FOREIGN TABLE my_foreign_table IS \u0026#39;Employee Information in other database\u0026#39;;\nCOMMENT ON FUNCTION my_function (timestamp) IS \u0026#39;Returns Roman Numeral\u0026#39;;\nCOMMENT ON INDEX my_index IS \u0026#39;Enforces uniqueness on employee ID\u0026#39;;\nCOMMENT ON LANGUAGE plpython IS \u0026#39;Python support for stored procedures\u0026#39;;\nCOMMENT ON LARGE OBJECT 346344 IS \u0026#39;Planning document\u0026#39;;\nCOMMENT ON MATERIALIZED VIEW my_matview IS \u0026#39;Summary of order history\u0026#39;;\nCOMMENT ON OPERATOR ^ (text, text) IS \u0026#39;Performs intersection of two texts\u0026#39;;\nCOMMENT ON OPERATOR - (NONE, integer) IS \u0026#39;Unary minus\u0026#39;;\nCOMMENT ON OPERATOR CLASS int4ops USING btree IS \u0026#39;4 byte integer operators for btrees\u0026#39;;\nCOMMENT ON OPERATOR FAMILY integer_ops USING btree IS \u0026#39;all integer operators for btrees\u0026#39;;\nCOMMENT ON POLICY my_policy ON mytable IS \u0026#39;Filter rows by users\u0026#39;;\nCOMMENT ON PROCEDURE my_proc (integer, integer) IS \u0026#39;Runs a report\u0026#39;;\nCOMMENT ON PUBLICATION alltables IS \u0026#39;Publishes all operations on all tables\u0026#39;;\nCOMMENT ON ROLE my_role IS \u0026#39;Administration group for finance tables\u0026#39;;\nCOMMENT ON ROUTINE my_routine (integer, integer) IS \u0026#39;Runs a routine (which is a function or procedure)\u0026#39;;\nCOMMENT ON RULE my_rule ON my_table IS \u0026#39;Logs updates of employee records\u0026#39;;\nCOMMENT ON SCHEMA my_schema IS \u0026#39;Departmental data\u0026#39;;\nCOMMENT ON SEQUENCE my_sequence IS \u0026#39;Used to generate primary keys\u0026#39;;\nCOMMENT ON SERVER myserver IS \u0026#39;my foreign server\u0026#39;;\nCOMMENT ON STATISTICS my_statistics IS \u0026#39;Improves planner row estimations\u0026#39;;\nCOMMENT ON SUBSCRIPTION alltables IS \u0026#39;Subscription for all operations on all tables\u0026#39;;\nCOMMENT ON TABLE my_schema.my_table IS \u0026#39;Employee Information\u0026#39;;\nCOMMENT ON TABLESPACE my_tablespace IS \u0026#39;Tablespace for indexes\u0026#39;;\nCOMMENT ON TEXT SEARCH CONFIGURATION my_config IS \u0026#39;Special word filtering\u0026#39;;\nCOMMENT ON TEXT SEARCH DICTIONARY swedish IS \u0026#39;Snowball stemmer for Swedish language\u0026#39;;\nCOMMENT ON TEXT SEARCH PARSER my_parser IS \u0026#39;Splits text into words\u0026#39;;\nCOMMENT ON TEXT SEARCH TEMPLATE snowball IS \u0026#39;Snowball stemmer\u0026#39;;\nCOMMENT ON TRANSFORM FOR hstore LANGUAGE plpython3u IS \u0026#39;Transform between hstore and Python dict\u0026#39;;\nCOMMENT ON TRIGGER my_trigger ON my_table IS \u0026#39;Used for RI\u0026#39;;\nCOMMENT ON TYPE complex IS \u0026#39;Complex number data type\u0026#39;;\nCOMMENT ON VIEW my_view IS \u0026#39;View of departmental costs\u0026#39;;\nCOMMENT ON VIEW my_view IS NULL;\n\u003c/pre\u003e\u003c/section\u003e\u003csection\u003e\u003ch2\u003e兼容性\u003c/h2\u003e\u003cp\u003eSQL 标准中没有\u003ccode\u003eCOMMENT\u003c/code\u003e命令。\u003c/p\u003e\u003c/section\u003e","SourceRevision":"ca936764","ContentHash":"ed9f93900fd0df7f09ace31a493de1e0ac99ee6c8b34052f3cf0a2da83ab04e0","Payload":{"purpose_zh":"定义或修改对象的注释","sections":[{"html":"\u003cp\u003e\u003ccode class=\"command\"\u003eCOMMENT\u003c/code\u003e用于存储、替换或移除数据库对象上的注释。\u003c/p\u003e\u003cp\u003e每个对象只存储一个注释字符串。对同一对象发出新的 \u003ccode class=\"command\"\u003eCOMMENT\u003c/code\u003e命令会替换现有注释。指定 \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e或空字符串（\u003ccode class=\"literal\"\u003e''\u003c/code\u003e）会移除注释。当对象被删除时，其注释也会自动删除。\u003c/p\u003e\u003cp\u003e将在要添加注释的对象上获取一个\u003ccode class=\"literal\"\u003eSHARE UPDATE EXCLUSIVE\u003c/code\u003e锁。\u003c/p\u003e\u003cp\u003e对于大多数对象类型，只有对象的拥有者才能设置注释。角色没有拥有者，因此 \u003ccode class=\"literal\"\u003eCOMMENT ON ROLE\u003c/code\u003e的规则是：若要为超级用户角色添加注释，你必须是超级用户；否则，你必须拥有\u003ccode class=\"literal\"\u003eCREATEROLE\u003c/code\u003e权限，并且在目标角色上已获授 \u003ccode class=\"literal\"\u003eADMIN OPTION\u003c/code\u003e。同样，访问方法也没有拥有者；要为访问方法添加注释，你必须是超级用户。当然，超级用户可以为任何对象添加注释。\u003c/p\u003e\u003cp\u003e可以使用\u003cspan class=\"application\"\u003epsql\u003c/span\u003e的\u003ccode class=\"command\"\u003e\\d\u003c/code\u003e 系列命令查看这些注释。其他用于检索注释的用户界面，也可以建立在 \u003cspan class=\"application\"\u003epsql\u003c/span\u003e使用的同一组内置函数之上，即 \u003ccode class=\"function\"\u003eobj_description\u003c/code\u003e、\u003ccode class=\"function\"\u003ecol_description\u003c/code\u003e 和\u003ccode class=\"function\"\u003eshobj_description\u003c/code\u003e（见\u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-COMMENT-TABLE\" title=\"表 9.82. 注释信息函数\"\u003e表 9.82\u003c/a\u003e）。\u003c/p\u003e","key":"description","title":"描述"},{"html":"\u003cdiv class=\"variablelist\"\u003e\u003cdl class=\"variablelist\"\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003erelation_name\u003c/code\u003e\u003c/em\u003e.\u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eaggregate_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003econstraint_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003efunction_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eoperator_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003epolicy_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eprocedure_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eroutine_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003erule_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003etrigger_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e要添加注释的对象名称。位于模式中的对象（表、函数等）的名称可以带模式限定。为列添加注释时，\u003cem class=\"replaceable\"\u003e\u003ccode\u003erelation_name\u003c/code\u003e\u003c/em\u003e必须引用一个表、视图、复合类型或外部表。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003etable_name\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003edomain_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e当为约束、触发器、规则或策略创建注释时，这些参数指定定义该对象的表或域的名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003esource_type\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该类型转换的源数据类型的名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003etarget_type\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该类型转换的目标数据类型的名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e函数、过程或聚合函数参数的模式：\u003ccode class=\"literal\"\u003eIN\u003c/code\u003e、\u003ccode class=\"literal\"\u003eOUT\u003c/code\u003e、\u003ccode class=\"literal\"\u003eINOUT\u003c/code\u003e或\u003ccode class=\"literal\"\u003eVARIADIC\u003c/code\u003e。如果省略，默认值是\u003ccode class=\"literal\"\u003eIN\u003c/code\u003e。注意\u003ccode class=\"command\"\u003eCOMMENT\u003c/code\u003e 实际上并不关心\u003ccode class=\"literal\"\u003eOUT\u003c/code\u003e参数，因为确定函数标识只需要输入参数。因此，列出\u003ccode class=\"literal\"\u003eIN\u003c/code\u003e、\u003ccode class=\"literal\"\u003eINOUT\u003c/code\u003e和\u003ccode class=\"literal\"\u003eVARIADIC\u003c/code\u003e 参数就足够了。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e函数、过程或聚合函数参数的名称。注意\u003ccode class=\"command\"\u003eCOMMENT\u003c/code\u003e 实际上并不关心参数名称，因为确定函数标识只需要参数数据类型。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e函数、过程或聚合函数参数的数据类型。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003elarge_object_oid\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e大对象的 OID。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eleft_type\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eright_type\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e操作符参数的数据类型（可以是模式限定的）。对于前缀操作符缺失的参数，请写成\u003ccode class=\"literal\"\u003eNONE\u003c/code\u003e。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003ePROCEDURAL\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e这是一个噪声词。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003etype_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该转换的数据类型名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003elang_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该转换所用语言的名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003estring_literal\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e新的注释内容，以字符串字面量形式写成。空字符串（\u003ccode class=\"literal\"\u003e''\u003c/code\u003e）会移除该注释。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e写入\u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e以移除该注释。\u003c/p\u003e\u003c/dd\u003e\u003c/dl\u003e\u003c/div\u003e","key":"parameters","title":"参数"},{"html":"\u003cp\u003e目前没有用于查看注释的安全机制：任何连接到某个数据库的用户都可以看到该数据库中所有对象的注释。对于数据库、角色和表空间这类共享对象，注释是全局存储的，因此连接到集簇中任一数据库的任何用户都可以看到共享对象的全部注释。因此，不要在注释中放入与安全密切相关的信息。\u003c/p\u003e","key":"notes","title":"注解"},{"html":"\u003cp\u003e为表\u003ccode class=\"literal\"\u003emytable\u003c/code\u003e附加一条注释：\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eCOMMENT ON TABLE mytable IS 'This is my table.';\n\u003c/pre\u003e\u003cp\u003e再将其移除：\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eCOMMENT ON TABLE mytable IS NULL;\n\u003c/pre\u003e\u003cp\u003e更多示例：\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eCOMMENT ON ACCESS METHOD gin IS 'GIN index access method';\nCOMMENT ON AGGREGATE my_aggregate (double precision) IS 'Computes sample variance';\nCOMMENT ON CAST (text AS int4) IS 'Allow casts from text to int4';\nCOMMENT ON COLLATION \"fr_CA\" IS 'Canadian French';\nCOMMENT ON COLUMN my_table.my_column IS 'Employee ID number';\nCOMMENT ON CONVERSION my_conv IS 'Conversion to UTF8';\nCOMMENT ON CONSTRAINT bar_col_cons ON bar IS 'Constrains column col';\nCOMMENT ON CONSTRAINT dom_col_constr ON DOMAIN dom IS 'Constrains col of domain';\nCOMMENT ON DATABASE my_database IS 'Development Database';\nCOMMENT ON DOMAIN my_domain IS 'Email Address Domain';\nCOMMENT ON EVENT TRIGGER abort_ddl IS 'Aborts all DDL commands';\nCOMMENT ON EXTENSION hstore IS 'implements the hstore data type';\nCOMMENT ON FOREIGN DATA WRAPPER mywrapper IS 'my foreign data wrapper';\nCOMMENT ON FOREIGN TABLE my_foreign_table IS 'Employee Information in other database';\nCOMMENT ON FUNCTION my_function (timestamp) IS 'Returns Roman Numeral';\nCOMMENT ON INDEX my_index IS 'Enforces uniqueness on employee ID';\nCOMMENT ON LANGUAGE plpython IS 'Python support for stored procedures';\nCOMMENT ON LARGE OBJECT 346344 IS 'Planning document';\nCOMMENT ON MATERIALIZED VIEW my_matview IS 'Summary of order history';\nCOMMENT ON OPERATOR ^ (text, text) IS 'Performs intersection of two texts';\nCOMMENT ON OPERATOR - (NONE, integer) IS 'Unary minus';\nCOMMENT ON OPERATOR CLASS int4ops USING btree IS '4 byte integer operators for btrees';\nCOMMENT ON OPERATOR FAMILY integer_ops USING btree IS 'all integer operators for btrees';\nCOMMENT ON POLICY my_policy ON mytable IS 'Filter rows by users';\nCOMMENT ON PROCEDURE my_proc (integer, integer) IS 'Runs a report';\nCOMMENT ON PUBLICATION alltables IS 'Publishes all operations on all tables';\nCOMMENT ON ROLE my_role IS 'Administration group for finance tables';\nCOMMENT ON ROUTINE my_routine (integer, integer) IS 'Runs a routine (which is a function or procedure)';\nCOMMENT ON RULE my_rule ON my_table IS 'Logs updates of employee records';\nCOMMENT ON SCHEMA my_schema IS 'Departmental data';\nCOMMENT ON SEQUENCE my_sequence IS 'Used to generate primary keys';\nCOMMENT ON SERVER myserver IS 'my foreign server';\nCOMMENT ON STATISTICS my_statistics IS 'Improves planner row estimations';\nCOMMENT ON SUBSCRIPTION alltables IS 'Subscription for all operations on all tables';\nCOMMENT ON TABLE my_schema.my_table IS 'Employee Information';\nCOMMENT ON TABLESPACE my_tablespace IS 'Tablespace for indexes';\nCOMMENT ON TEXT SEARCH CONFIGURATION my_config IS 'Special word filtering';\nCOMMENT ON TEXT SEARCH DICTIONARY swedish IS 'Snowball stemmer for Swedish language';\nCOMMENT ON TEXT SEARCH PARSER my_parser IS 'Splits text into words';\nCOMMENT ON TEXT SEARCH TEMPLATE snowball IS 'Snowball stemmer';\nCOMMENT ON TRANSFORM FOR hstore LANGUAGE plpython3u IS 'Transform between hstore and Python dict';\nCOMMENT ON TRIGGER my_trigger ON my_table IS 'Used for RI';\nCOMMENT ON TYPE complex IS 'Complex number data type';\nCOMMENT ON VIEW my_view IS 'View of departmental costs';\nCOMMENT ON VIEW my_view IS NULL;\n\u003c/pre\u003e","key":"examples","title":"示例"},{"html":"\u003cp\u003eSQL 标准中没有\u003ccode class=\"command\"\u003eCOMMENT\u003c/code\u003e命令。\u003c/p\u003e","key":"compatibility","title":"兼容性"}],"sections_same_as":"","synopsis_html":"COMMENT ON\n{\n  ACCESS METHOD \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  AGGREGATE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eaggregate_name\u003c/code\u003e\u003c/em\u003e ( \u003cem class=\"replaceable\"\u003e\u003ccode\u003eaggregate_signature\u003c/code\u003e\u003c/em\u003e ) |\n  CAST (\u003cem class=\"replaceable\"\u003e\u003ccode\u003esource_type\u003c/code\u003e\u003c/em\u003e AS \u003cem class=\"replaceable\"\u003e\u003ccode\u003etarget_type\u003c/code\u003e\u003c/em\u003e) |\n  COLLATION \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  COLUMN \u003cem class=\"replaceable\"\u003e\u003ccode\u003erelation_name\u003c/code\u003e\u003c/em\u003e.\u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e |\n  CONSTRAINT \u003cem class=\"replaceable\"\u003e\u003ccode\u003econstraint_name\u003c/code\u003e\u003c/em\u003e ON \u003cem class=\"replaceable\"\u003e\u003ccode\u003etable_name\u003c/code\u003e\u003c/em\u003e |\n  CONSTRAINT \u003cem class=\"replaceable\"\u003e\u003ccode\u003econstraint_name\u003c/code\u003e\u003c/em\u003e ON DOMAIN \u003cem class=\"replaceable\"\u003e\u003ccode\u003edomain_name\u003c/code\u003e\u003c/em\u003e |\n  CONVERSION \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  DATABASE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  DOMAIN \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  EXTENSION \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  EVENT TRIGGER \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  FOREIGN DATA WRAPPER \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  FOREIGN TABLE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  FUNCTION \u003cem class=\"replaceable\"\u003e\u003ccode\u003efunction_name\u003c/code\u003e\u003c/em\u003e [ ( [ [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e ] [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e [, ...] ] ) ] |\n  INDEX \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  LARGE OBJECT \u003cem class=\"replaceable\"\u003e\u003ccode\u003elarge_object_oid\u003c/code\u003e\u003c/em\u003e |\n  MATERIALIZED VIEW \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  OPERATOR \u003cem class=\"replaceable\"\u003e\u003ccode\u003eoperator_name\u003c/code\u003e\u003c/em\u003e (\u003cem class=\"replaceable\"\u003e\u003ccode\u003eleft_type\u003c/code\u003e\u003c/em\u003e, \u003cem class=\"replaceable\"\u003e\u003ccode\u003eright_type\u003c/code\u003e\u003c/em\u003e) |\n  OPERATOR CLASS \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e USING \u003cem class=\"replaceable\"\u003e\u003ccode\u003eindex_method\u003c/code\u003e\u003c/em\u003e |\n  OPERATOR FAMILY \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e USING \u003cem class=\"replaceable\"\u003e\u003ccode\u003eindex_method\u003c/code\u003e\u003c/em\u003e |\n  POLICY \u003cem class=\"replaceable\"\u003e\u003ccode\u003epolicy_name\u003c/code\u003e\u003c/em\u003e ON \u003cem class=\"replaceable\"\u003e\u003ccode\u003etable_name\u003c/code\u003e\u003c/em\u003e |\n  [ PROCEDURAL ] LANGUAGE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  PROCEDURE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eprocedure_name\u003c/code\u003e\u003c/em\u003e [ ( [ [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e ] [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e [, ...] ] ) ] |\n  PUBLICATION \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  ROLE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  ROUTINE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eroutine_name\u003c/code\u003e\u003c/em\u003e [ ( [ [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e ] [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e [, ...] ] ) ] |\n  RULE \u003cem class=\"replaceable\"\u003e\u003ccode\u003erule_name\u003c/code\u003e\u003c/em\u003e ON \u003cem class=\"replaceable\"\u003e\u003ccode\u003etable_name\u003c/code\u003e\u003c/em\u003e |\n  SCHEMA \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  SEQUENCE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  SERVER \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  STATISTICS \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  SUBSCRIPTION \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  TABLE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  TABLESPACE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  TEXT SEARCH CONFIGURATION \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  TEXT SEARCH DICTIONARY \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  TEXT SEARCH PARSER \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  TEXT SEARCH TEMPLATE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  TRANSFORM FOR \u003cem class=\"replaceable\"\u003e\u003ccode\u003etype_name\u003c/code\u003e\u003c/em\u003e LANGUAGE \u003cem class=\"replaceable\"\u003e\u003ccode\u003elang_name\u003c/code\u003e\u003c/em\u003e |\n  TRIGGER \u003cem class=\"replaceable\"\u003e\u003ccode\u003etrigger_name\u003c/code\u003e\u003c/em\u003e ON \u003cem class=\"replaceable\"\u003e\u003ccode\u003etable_name\u003c/code\u003e\u003c/em\u003e |\n  TYPE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e |\n  VIEW \u003cem class=\"replaceable\"\u003e\u003ccode\u003eobject_name\u003c/code\u003e\u003c/em\u003e\n} IS { \u003cem class=\"replaceable\"\u003e\u003ccode\u003estring_literal\u003c/code\u003e\u003c/em\u003e | NULL }\n\n\u003cspan class=\"phrase\"\u003e其中 \u003cem class=\"replaceable\"\u003e\u003ccode\u003eaggregate_signature\u003c/code\u003e\u003c/em\u003e 是：\u003c/span\u003e\n\n* |\n[ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e ] [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e [ , ... ] |\n[ [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e ] [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e [ , ... ] ] ORDER BY [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e ] [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e [ , ... ]","synopsis_text":"COMMENT ON\n{\nACCESS METHOD object_name |\nAGGREGATE aggregate_name ( aggregate_signature ) |\nCAST (source_type AS target_type) |\nCOLLATION object_name |\nCOLUMN relation_name.column_name |\nCONSTRAINT constraint_name ON table_name |\nCONSTRAINT constraint_name ON DOMAIN domain_name |\nCONVERSION object_name |\nDATABASE object_name |\nDOMAIN object_name |\nEXTENSION object_name |\nEVENT TRIGGER object_name |\nFOREIGN DATA WRAPPER object_name |\nFOREIGN TABLE object_name |\nFUNCTION function_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |\nINDEX object_name |\nLARGE OBJECT large_object_oid |\nMATERIALIZED VIEW object_name |\nOPERATOR operator_name (left_type, right_type) |\nOPERATOR CLASS object_name USING index_method |\nOPERATOR FAMILY object_name USING index_method |\nPOLICY policy_name ON table_name |\n[ PROCEDURAL ] LANGUAGE object_name |\nPROCEDURE procedure_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |\nPUBLICATION object_name |\nROLE object_name |\nROUTINE routine_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |\nRULE rule_name ON table_name |\nSCHEMA object_name |\nSEQUENCE object_name |\nSERVER object_name |\nSTATISTICS object_name |\nSUBSCRIPTION object_name |\nTABLE object_name |\nTABLESPACE object_name |\nTEXT SEARCH CONFIGURATION object_name |\nTEXT SEARCH DICTIONARY object_name |\nTEXT SEARCH PARSER object_name |\nTEXT SEARCH TEMPLATE object_name |\nTRANSFORM FOR type_name LANGUAGE lang_name |\nTRIGGER trigger_name ON table_name |\nTYPE object_name |\nVIEW object_name\n} IS { string_literal | NULL }\n\n其中 aggregate_signature 是：\n\n* |\n[ argmode ] [ argname ] argtype [ , ... ] |\n[ [ argmode ] [ argname ] argtype [ , ... ] ] ORDER BY [ argmode ] [ argname ] argtype [ , ... ]"}},"RequestedLocale":"zh-Hans","Fallback":false,"Versions":["10","11","12","13","14","15","16","17","18","19","20","7.0","7.1","7.2","7.3","7.4","8.0","8.1","8.2","8.3","8.4","9.0","9.1","9.2","9.3","9.4","9.5","9.6"],"Locales":["en","zh-Hans"],"Signatures":null,"Spellings":null,"SQLState":null,"Evidence":null}
