ALTER FUNCTION
Эта страница переведена при помощи нейросети GigaChat.
ALTER FUNCTION — изменение определения функции.
Синтаксис
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
action [ ... ] [ RESTRICT ]
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
RENAME TO new_name
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
SET SCHEMA new_schema
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
[ NO ] DEPENDS ON EXTENSION extension_name
where action is one of:
CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
IMMUTABLE | STABLE | VOLATILE
[ NOT ] LEAKPROOF
[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
PARALLEL { UNSAFE | RESTRICTED | SAFE }
COST execution_cost
ROWS result_rows
SUPPORT support_function
SET configuration_parameter { TO | = } { value | DEFAULT }
SET configuration_parameter FROM CURRENT
RESET configuration_parameter
RESET ALL
Описание
ALTER FUNCTION изменяет определение функции. Чтобы выполнить эту команду, необходимо быть владельцем функции. Чтобы перенести функцию в другую схему, нужно иметь привилегию CREATE в целевой схеме.
Для смены владельца требуется право SET ROLE на новую роль-владельца, а сама эта роль должна обладать правом CREATE в схеме функции. Эти требования обеспечивают, что смена владельца не предоставляет дополнительных возможностей, которых нельзя было бы достичь удалением и повторным созданием функции. Исключение составляют суперпользователи, которые могут изменять владельца любой функции без ограничений.
Параметры
name- Задает имя существующей функции, при необходимости дополненное схемой, которая должна быть изменена. При отсутствии списка аргументов имя должно быть уникальным в своей схеме.
argmode- Задает режим аргумента:
IN,OUT,INOUTилиVARIADIC. По умолчанию используетсяIN. АргументыOUTне участвуют в определении сигнатуры функции, поэтому для изменения достаточно указатьIN,INOUTиVARIADIC.
argname- Задает имя аргумента функции. Это имя не влияет на поведение
ALTER FUNCTION, так как для определения идентичности функции требуются только типы данных аргументов.
argtype- Задает тип(ы) данных аргументов функции, при необходимости дополненное схемой, если есть.
new_name- Задает новое имя функции.
new_owner- Указывает нового владельца функции. Если функция определена как
SECURITY DEFINER, она будет выполняться от имени нового владельца.
new_schema- Задает новую схему, в которую переносится функция.
DEPENDS ON EXTENSION extension_nameNO DEPENDS ON EXTENSION extension_name- Устанавливает или снимает зависимость функции от расширения. При удалении расширения зависимая функция будет автоматически удалена, даже без указания
CASCADE. Функция может зависеть от нескольких расширений и будет удалена при удалении любого из этих расширений.
CALLED ON NULL INPUT- Вызывает функцию даже при передаче аргументов со значением
NULL. Смотрите CREATE FUNCTION для получения дополнительной информации.
RETURNS NULL ON NULL INPUTSTRICT- Не вызывает функцию при наличии
NULLсреди аргументов, результатом автоматически считаетсяNULL. Смотрите CREATE FUNCTION для получения дополнительной информации.
IMMUTABLESTABLEVOLATILE- Информируют оптимизатор запросов о поведении функции. Подробнее описано в разделе CREATE FUNCTION.
[ EXTERNAL ] SECURITY INVOKER[ EXTERNAL ] SECURITY DEFINER- Определяет, будет ли функция исполняться с правами пользователя, вызвавшего ее (
SECURITY INVOKER) или владеющего ей (SECURITY DEFINER).Ключевое слово
EXTERNALигнорируется для соответствия SQL. Подробнее описано в разделе CREATE FUNCTION.
PARALLEL- Указывает, может ли функция использоваться в параллельных запросах. Подробнее описано в разделе CREATE FUNCTION.
LEAKPROOF- Указывает, защищена ли функция от утечки информации через побочные эффекты. Подробнее описано в разделе CREATE FUNCTION.
COST execution_cost- Устанавливает ожидаемую затратность выполнения функции. Подробнее описано в разделе CREATE FUNCTION.
ROWS result_rows- Определяет ориентировочное число строк в результате функции, возвращающей множество. Подробнее описано в разделе CREATE FUNCTION.
SUPPORT support_function- Устанавливает или изменяет функцию поддержки, используемую планировщиком. Смотрите раздел «Информация об оптимизации функций» для подробной информации. Требуется права суперпользователя.
Удалить поддержку этой командой невозможно — для этого следует использовать
CREATE OR REPLACE FUNCTION.
configuration_parametervalue- Добавляет или изменяет установку параметра конфигурации, которая применяется при вызове функции. Если задано значение
DEFAULTили, что равнозначно, выполняется действиеRESET, локальное переопределение для функции удаляется и функция выполняется со значением, установленным в окружении. Для удаления всех установок параметров для данной функции укажитеRESET ALL.SET FROM CURRENTсохраняет текущее значение параметра как применяемое при вызове функции.Смотрите SET и главу «Конфигурация сервера» для получения дополнительной информации об именах параметров и допустимых значениях.
RESTRICT- Игнорируется для соответствия стандарту SQL.
Примеры
Переименование функции sqrt с аргументом типа integer в square_root:
ALTER FUNCTION sqrt(integer) RENAME TO square_root;
Смена владельца функции sqrt с аргументом типа integer на пользователя joe:
ALTER FUNCTION sqrt(integer) OWNER TO joe;
Смена схемы функции sqrt с аргументом типа integer на схему maths:
ALTER FUNCTION sqrt(integer) SET SCHEMA maths;
Обозначение функции sqrt с аргументом типа integer как зависящую от расширения mathlib:
ALTER FUNCTION sqrt(integer) DEPENDS ON EXTENSION mathlib;
Изменение пути поиска, который устанавливается автоматически для функции:
ALTER FUNCTION check_password(text) SET search_path = admin, pg_temp;
Отключение автоматического определения search_path для функции:
ALTER FUNCTION check_password(text) RESET search_path;
Теперь функция будет выполняться с тем путем, который задан в момент вызова.
Совместимость
Это выражение частично совместимо с SQL-стандартом ALTER FUNCTION. Стандарт допускает изменение большего количества свойств функции, но не предусматривает переименование функции, назначение определителя безопасности, установку параметров конфигурации, а также изменение владельца, схемы или изменяемости. В стандарте также обязательно использование ключевого слова RESTRICT, которое в PostgreSQL является необязательным.
Смотрите также
CREATE FUNCTION, DROP FUNCTION, ALTER PROCEDURE, ALTER ROUTINE