Перейти к основному содержимому

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_name
NO DEPENDS ON EXTENSION extension_name
Устанавливает или снимает зависимость функции от расширения. При удалении расширения зависимая функция будет автоматически удалена, даже без указания CASCADE. Функция может зависеть от нескольких расширений и будет удалена при удалении любого из этих расширений.
CALLED ON NULL INPUT
Вызывает функцию даже при передаче аргументов со значением NULL. Смотрите CREATE FUNCTION для получения дополнительной информации.
RETURNS NULL ON NULL INPUT
STRICT
Не вызывает функцию при наличии NULL среди аргументов, результатом автоматически считается NULL. Смотрите CREATE FUNCTION для получения дополнительной информации.
IMMUTABLE
STABLE
VOLATILE
Информируют оптимизатор запросов о поведении функции. Подробнее описано в разделе 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_parameter
value
Добавляет или изменяет установку параметра конфигурации, которая применяется при вызове функции. Если задано значение 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