COMMENT
COMMENT — задать или изменить комментарий объекта
Синтаксис
COMMENT ON { ACCESS METHODимя_объекта
| AGGREGATEимя_агрегатной_функции
(сигнатура_агр_функции
) | CAST (исходный_тип
ASцелевой_тип
) | COLLATIONимя_объекта
| COLUMNимя_отношения
.имя_столбца
| CONSTRAINTимя_ограничения
ONимя_таблицы
| CONSTRAINTимя_ограничения
ON DOMAINимя_домена
| CONVERSIONимя_объекта
| DATABASEимя_объекта
| DOMAINимя_объекта
| EXTENSIONимя_объекта
| EVENT TRIGGERимя_объекта
| FOREIGN DATA WRAPPERимя_объекта
| FOREIGN TABLEимя_объекта
| FUNCTIONимя_функции
[ ( [ [режим_аргумента
] [имя_аргумента
]тип_аргумента
[, ...] ] ) ] | INDEXимя_объекта
| LARGE OBJECToid_большого_объекта
| MATERIALIZED VIEWимя_объекта
| OPERATORимя_оператора
(тип_слева
,тип_справа
) | OPERATOR CLASSимя_объекта
USINGиндексный_метод
| OPERATOR FAMILYимя_объекта
USINGиндексный_метод
| POLICYимя_политики
ONимя_таблицы
| [ PROCEDURAL ] LANGUAGEимя_объекта
| PROCEDUREимя_процедуры
[ ( [ [режим_аргумента
] [имя_аргумента
]тип_аргумента
[, ...] ] ) ] | PUBLICATIONимя_объекта
| ROLEимя_объекта
| ROUTINEимя_подпрограммы
[ ( [ [режим_аргумента
] [имя_аргумента
]тип_аргумента
[, ...] ] ) ] | RULEимя_правила
ONимя_таблицы
| SCHEMAимя_объекта
| SEQUENCEимя_объекта
| SERVERимя_объекта
| STATISTICSимя_объекта
| SUBSCRIPTIONимя_объекта
| TABLEимя_объекта
| TABLESPACEимя_объекта
| TEXT SEARCH CONFIGURATIONимя_объекта
| TEXT SEARCH DICTIONARYимя_объекта
| TEXT SEARCH PARSERимя_объекта
| TEXT SEARCH TEMPLATEимя_объекта
| TRANSFORM FORимя_типа
LANGUAGEимя_языка
| TRIGGERимя_триггера
ONимя_таблицы
| TYPEимя_объекта
| VIEWимя_объекта
} IS {строковая_константа
| NULL } Здесьсигнатура_агр_функции
: * | [режим_аргумента
] [имя_аргумента
]тип_аргумента
[ , ... ] | [ [режим_аргумента
] [имя_аргумента
]тип_аргумента
[ , ... ] ] ORDER BY [режим_аргумента
] [имя_аргумента
]тип_аргумента
[ , ... ]
Описание
COMMENT
сохраняет комментарий об объекте базы данных.
Для каждого объекта сохраняется только одна строка, так что для изменения комментария нужно просто выполнить COMMENT
ещё раз для того же объекта. Чтобы удалить комментарий, вместо текстовой строки укажите NULL
. При удалении объектов комментарии удаляются автоматически.
Для целевого объекта запрашивается блокировка SHARE UPDATE EXCLUSIVE
.
Для большинства типов объектов комментарий может установить только владелец объекта. Но так как роли не имеют владельцев, COMMENT ON ROLE
для ролей суперпользователей разрешено выполнять только суперпользователям или тем, кто имеет право CREATEROLE
и получил право ADMIN OPTION
для целевой роли. Так же не имеют владельцев и методы доступа; чтобы добавить комментарий для метода доступа, нужно быть суперпользователем. Разумеется, суперпользователи могут задавать комментарии для любых объектов.
Просмотреть комментарии можно в psql, используя семейство команд \d
. Имеется возможность получать комментарии и в других пользовательских интерфейсах, используя те же встроенные функции, что использует psql, а именно obj_description
, col_description
и shobj_description
(см. Таблицу 9.80).
Параметры
имя_объекта
имя_отношения
.имя_столбца
имя_агрегатной_функции
имя_ограничения
имя_функции
имя_оператора
имя_политики
имя_процедуры
имя_подпрограммы
имя_правила
имя_триггера
Имя объекта, для которого задаётся комментарий. Имена объектов, располагающихся в схемах, например, имена таблиц, функций и т. п., можно дополнить именем схемы. Когда определяется комментарий для столбца,
имя_отношения
должно ссылаться на таблицу, представление, составной тип или стороннюю таблицу.имя_таблицы
имя_домена
При создании комментария для ограничения, триггера, правила или политики эти параметры задают имя таблицы или домена, к которым относится этот объект.
исходный_тип
Имя исходного типа данных для приведения.
целевой_тип
Имя целевого типа данных для приведения.
режим_аргумента
Режим аргумента функции, процедуры или агрегата:
IN
,OUT
,INOUT
илиVARIADIC
. По умолчанию подразумеваетсяIN
. Заметьте, чтоCOMMENT
не учитывает аргументыOUT
, так как для идентификации функции нужны только типы входных аргументов. Поэтому достаточно перечислить только аргументыIN
,INOUT
иVARIADIC
.имя_аргумента
Имя аргумента функции, процедуры или агрегата. Заметьте, что на самом деле
COMMENT
не обращает внимание на имена аргументов, так как для однозначной идентификации функции достаточно только типов аргументов.тип_аргумента
Тип данных аргумента функции, процедуры или агрегата.
oid_большого_объекта
OID большого объекта.
тип_слева
тип_справа
Тип данных аргументов оператора (возможно, дополненный именем схемы). В случае отсутствия аргумента префиксного оператора укажите вместо типа
NONE
.PROCEDURAL
Это слово не несёт смысловой нагрузки.
имя_типа
Имя типа данных, для которого предназначена трансформация.
имя_языка
Имя языка, для которого предназначена трансформация.
строковая_константа
Содержание нового комментария, записанное в виде строковой константы.
NULL
Укажите
NULL
для удаления комментария.
Примечания
В настоящее время механизм безопасности в части просмотра комментариев отсутствует: любой пользователь, подключённый к базе данных, может видеть все комментарии всех объектов базы. Для общих объектов, таких как базы данных, роли и табличные пространства, комментарии хранятся глобально, так что их может видеть любой пользователь, подключённый к любой базе данных в кластере. Поэтому ничего секретного писать в комментариях не следует.
Примеры
Добавление комментария для таблицы mytable
:
COMMENT ON TABLE mytable IS 'Это моя таблица.';
Удаление его:
COMMENT ON TABLE mytable IS NULL;
Ещё несколько примеров:
COMMENT ON ACCESS METHOD gin IS 'Метод доступа для индекса GIN'; COMMENT ON AGGREGATE my_aggregate (double precision) IS 'Вычисляет дисперсию выборки'; COMMENT ON CAST (text AS int4) IS 'Выполняет приведение строк к int4'; COMMENT ON COLLATION "fr_CA" IS 'Канадский французский'; COMMENT ON COLUMN my_table.my_column IS 'Порядковый номер сотрудника'; COMMENT ON CONVERSION my_conv IS 'Перекодировка в UTF-8'; COMMENT ON CONSTRAINT bar_col_cons ON bar IS 'Ограничение столбца col'; COMMENT ON CONSTRAINT dom_col_constr ON DOMAIN dom IS 'Ограничение для домена'; COMMENT ON DATABASE my_database IS 'База данных разработчиков'; COMMENT ON DOMAIN my_domain IS 'Домен почтового адреса'; COMMENT ON EVENT TRIGGER abort_ddl IS 'Прерывает все команды DDL'; COMMENT ON EXTENSION hstore IS 'Реализует тип данных hstore'; COMMENT ON FOREIGN DATA WRAPPER mywrapper IS 'Моя обёртка сторонних данных'; COMMENT ON FOREIGN TABLE my_foreign_table IS 'Информация о сотрудниках в другой БД'; COMMENT ON FUNCTION my_function (timestamp) IS 'Возвращает число римскими цифрами'; COMMENT ON INDEX my_index IS 'Обеспечивает уникальность по коду сотрудника'; COMMENT ON LANGUAGE plpython IS 'Поддержка Python для хранимых процедур'; COMMENT ON LARGE OBJECT 346344 IS 'Документ планирования'; COMMENT ON MATERIALIZED VIEW my_matview IS 'Сводка истории заказов'; COMMENT ON OPERATOR ^ (text, text) IS 'Вычисляет пересечение двух текстов'; COMMENT ON OPERATOR - (NONE, integer) IS 'Унарный минус'; COMMENT ON OPERATOR CLASS int4ops USING btree IS 'Операторы для четырёхбайтовых целых (для B-деревьев)'; COMMENT ON OPERATOR FAMILY integer_ops USING btree IS 'Все целочисленные операторы (для B-деревьев)'; COMMENT ON POLICY my_policy ON mytable IS 'Фильтр строк по пользователям'; COMMENT ON PROCEDURE my_proc (integer, integer) IS 'Строит отчёт'; COMMENT ON PUBLICATION alltables IS 'Публикует все операции во всех таблицах'; COMMENT ON ROLE my_role IS 'Административная группа для таблиц бухгалтерии'; COMMENT ON ROUTINE my_routine (integer, integer) IS 'Выполняет подпрограмму (функцию или процедуру)'; COMMENT ON RULE my_rule ON my_table IS 'Протоколирует изменения в записях сотрудников'; COMMENT ON SCHEMA my_schema IS 'Данные отдела'; COMMENT ON SEQUENCE my_sequence IS 'Предназначена для генерации первичных ключей'; COMMENT ON SERVER myserver IS 'Мой сторонний сервер'; COMMENT ON STATISTICS my_statistics IS 'Улучшает оценку числа строк для планировщика'; COMMENT ON SUBSCRIPTION alltables IS 'Подписка на все операции во всех таблицах'; COMMENT ON TABLE my_schema.my_table IS 'Данные сотрудников'; COMMENT ON TABLESPACE my_tablespace IS 'Табличное пространство для индексов'; COMMENT ON TEXT SEARCH CONFIGURATION my_config IS 'Фильтрация специальных слов'; COMMENT ON TEXT SEARCH DICTIONARY swedish IS 'Стеммер Snowball для шведского языка'; COMMENT ON TEXT SEARCH PARSER my_parser IS 'Разделяет текст на слова'; COMMENT ON TEXT SEARCH TEMPLATE snowball IS 'Стеммер Snowball'; COMMENT ON TRANSFORM FOR hstore LANGUAGE plpython3u IS 'Трансформирует данные из hstore в словарь Python'; COMMENT ON TRIGGER my_trigger ON my_table IS 'Обеспечивает ссылочную целостность'; COMMENT ON TYPE complex IS 'Тип данных комплексных чисел'; COMMENT ON VIEW my_view IS 'Представление расходов по отделам';
Совместимость
Оператор COMMENT
отсутствует в стандарте SQL.