COMMENT

Определяет или изменяет комментарий объекта.

Синтаксис

COMMENT ON
{ ACCESS METHOD <object_name> |
  AGGREGATE <aggregate_name> (<aggregate_signature>) |
  CAST (<source_type> AS <target_type>) |
  COLLATION <object_name>
  COLUMN <relation_name>.<column_name> |
  CONSTRAINT <constraint_name> ON <table_name> |
  CONSTRAINT <constraint_name> ON DOMAIN <domain_name> |
  CONVERSION <object_name> |
  DATABASE <object_name> |
  DOMAIN <object_name> |
  EVENT TRIGGER <object_name> |
  EXTENSION <object_name> |
  FOREIGN DATA WRAPPER <object_name> |
  FOREIGN TABLE <object_name> |
  FUNCTION <function_name> [([[<argmode>] [<argname>] <argtype> [, ...]])] |
  INDEX <object_name> |
  MATERIALIZED VIEW <object_name> |
  OPERATOR <operator_name> (<left_type>, <right_type>) |
  OPERATOR CLASS <object_name> USING <index_method> |
  OPERATOR FAMILY <object_name> USING <index_method> |
  POLICY <policy_name> ON <table_name> |
  [PROCEDURAL] LANGUAGE <object_name> |
  PROCEDURE <procedure_name> [([[<argmode>] [<argname>] <argtype> [, ...]])] |
  RESOURCE GROUP <object_name> |
  RESOURCE QUEUE <object_name> |
  ROLE <object_name |
  ROUTINE <routine_name> [([[<argmode>] [<argname>] <argtype> [, ...]])] |
  RULE <rule_name> ON <table_name> |
  SCHEMA <object_name> |
  SEQUENCE <object_name> |
  SERVER <object_name> |
  STATISTICS <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> |
  TRANSFORM FOR <type_name> LANGUAGE <lang_name> |
  TRIGGER <trigger_name> ON <table_name> |
  TYPE <object_name> |
  VIEW <object_name>
} IS { <string_literal> | NULL }

where <aggregate_signature> is:

* |
[ <argmode> ] [ <argname> ] <argtype> [ , ... ] |
[ [ <argmode> ] [ <argname> ] <argtype> [ , ... ] ] ORDER BY [ <argmode> ] [ <argname> ] <argtype> [ , ... ]

Описание

COMMENT сохраняет комментарий к объекту базы данных. Для каждого объекта хранится только одна строка комментария, поэтому для его изменения необходимо выполнить новую команду COMMENT для того же объекта. Чтобы удалить комментарий, укажите вместо текстовой строки значение NULL. Комментарии автоматически удаляются при удалении самого объекта.

База данных получает блокировку уровня SHARE UPDATE EXCLUSIVE на объект, к которому добавляется комментарий.

Для большинства типов объектов установить комментарий может только владелец объекта. Роли не имеют владельцев, поэтому правило для COMMENT ON ROLE заключается в следующем: вы должны быть суперпользователем, чтобы прокомментировать суперпользовательскую роль, или обладать привилегией CREATEROLE — чтобы прокомментировать обычную роль. Аналогично, методы доступа также не имеют владельцев; вы должны быть суперпользователем, чтобы прокомментировать метод доступа. Разумеется, суперпользователь может прокомментировать любой объект.

Просматривать комментарии можно с помощью метакоманд psql \dd, \d+ и \l+. Другие пользовательские интерфейсы для получения комментариев могут быть построены на основе тех же встроенных функций, которые использует psql, а именно: obj_description(), col_description() и shobj_description().

Параметры

  • 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 должна ссылаться на таблицу, представление, материализованное представление, составной тип или внешнюю таблицу.

Примечание!
Database не поддерживает триггеры.

  • table_name
  • domain_name
    • При создании комментария к ограничению, триггеру, правилу или политике эти параметры задают имя таблицы или домена, в которых определён данный объект.
  • source_type
    • Имя исходного типа данных приведения.
  • target_type
    • Имя целевого типа данных приведения.
  • argmode
    • Режим аргумента функции или агрегата: IN, OUT, INOUT или VARIADIC. Если опущено, по умолчанию используется IN. Обратите внимание, что COMMENT фактически не учитывает аргументы OUT, поскольку для определения идентичности функции требуются только входные аргументы. Достаточно перечислить аргументы IN, INOUT и VARIADIC.
  • argname
    • Имя аргумента функции, процедуры или агрегата. Обратите внимание, что COMMENT фактически не учитывает имена аргументов, поскольку для определения идентичности функции требуются только типы аргументов.
  • argtype
    • Тип данных аргумента функции, процедуры или агрегата.
  • left_type
  • right_type
    • Тип(ы) данных аргументов оператора (при необходимости с указанием схемы). Укажите NONE для отсутствующего аргумента префиксного или постфиксного оператора.
  • PROCEDURAL
    • Database игнорирует это служебное слово.
  • type_name
    • Имя типа данных преобразования.
  • lang_name
    • Имя языка преобразования.
  • string_literal
    • Новое содержимое комментария, записанное как строковый литерал.
  • NULL
    • Укажите NULL, чтобы удалить комментарий.

Замечания

В настоящее время механизм безопасности для просмотра комментариев отсутствует: любой пользователь, подключённый к базе данных, может видеть все комментарии к объектам этой базы. Для общих объектов, таких как базы данных, роли и табличные пространства, комментарии хранятся глобально, поэтому любой пользователь, подключённый к любой базе данных в кластере, может видеть комментарии ко всем общим объектам.

Внимание! Не размещайте в комментариях информацию, критичную с точки зрения безопасности.

Примеры

Добавить комментарий к таблице mytable:

COMMENT ON TABLE mytable IS 'This is my table.';

Затем удалить его:

COMMENT ON TABLE mytable IS NULL;

Другие примеры:

COMMENT ON ACCESS METHOD gin IS 'GIN index access method';
COMMENT ON AGGREGATE my_aggregate (double precision) IS 'Computes sample variance';
COMMENT ON CAST (text AS int4) IS 'Allow casts from text to int4';
COMMENT ON COLLATION "fr_CA" IS 'Canadian French';
COMMENT ON COLUMN my_table.my_column IS 'Employee ID number';
COMMENT ON CONVERSION my_conv IS 'Conversion to UTF8';
COMMENT ON CONSTRAINT bar_col_cons ON bar IS 'Constrains column col';
COMMENT ON CONSTRAINT dom_col_constr ON DOMAIN dom IS 'Constrains col of domain';
COMMENT ON DATABASE my_database IS 'Development Database';
COMMENT ON DOMAIN my_domain IS 'Email Address Domain';
COMMENT ON EVENT TRIGGER cancel_ddl IS 'Cancels all DLL commands';
COMMENT ON EXTENSION hstore IS 'implements the hstore data type';
COMMENT ON FOREIGN DATA WRAPPER mywrapper IS 'my foreign data wrapper';
COMMENT ON FOREIGN TABLE my_foreign_table IS 'Employee Information in other database';
COMMENT ON FUNCTION my_function (timestamp) IS 'Returns Roman Numeral';
COMMENT ON INDEX my_index IS 'Enforces uniqueness on employee ID';
COMMENT ON LANGUAGE plpython IS 'Python support for stored procedures';
COMMENT ON MATERIALIZED VIEW my_matview IS 'Summary of order history';
COMMENT ON OPERATOR ^ (text, text) IS 'Performs intersection of two texts';
COMMENT ON OPERATOR - (NONE, integer) IS 'Unary minus';
COMMENT ON OPERATOR CLASS int4_ops USING btree IS '4 byte integer operators for btrees';
COMMENT ON OPERATOR FAMILY integer_ops USING btree IS 'all integer operators for btrees';
COMMENT ON POLICY my_policy ON mytable IS 'Filter rows by users';
COMMENT ON PROCEDURE my_proc (integer, integer) IS 'Runs a report';
COMMENT ON ROLE my_role IS 'Administration group for finance tables';
COMMENT ON ROUTINE my_routine (integer, integer) IS 'Runs a routine (which is a function or procedure)';
COMMENT ON RULE my_rule ON my_table IS 'Logs updates of employee records';
COMMENT ON SCHEMA my_schema IS 'Departmental data';
COMMENT ON SEQUENCE my_sequence IS 'Used to generate primary keys';
COMMENT ON SERVER myserver IS 'my foreign server';
COMMENT ON STATISTICS my_statistics IS 'Improves planner row estimations';
COMMENT ON TABLE my_schema.my_table IS 'Employee Information';
COMMENT ON TABLESPACE my_tablespace IS 'Tablespace for indexes';
COMMENT ON TEXT SEARCH CONFIGURATION my_config IS 'Special word filtering';
COMMENT ON TEXT SEARCH DICTIONARY swedish IS 'Snowball stemmer for Swedish language';
COMMENT ON TEXT SEARCH PARSER my_parser IS 'Splits text into words';
COMMENT ON TEXT SEARCH TEMPLATE snowball IS 'Snowball stemmer';
COMMENT ON TRANSFORM FOR hstore LANGUAGE plpythonu IS 'Transform between hstore and Python dict';
COMMENT ON TRIGGER my_trigger ON my_table IS 'Used for RI';
COMMENT ON TYPE complex IS 'Complex number data type';
COMMENT ON VIEW my_view IS 'View of departmental costs';

Совместимость

Команда COMMENT отсутствует в стандарте SQL.