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