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 в целевой схеме.
Изменить владельца можно только при условии, что текущий пользователь является прямым или косвенным членом новой роли владельца, а сама роль обладает привилегией 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