ALTER FUNCTION#

ALTER FUNCTION

ALTER FUNCTION

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 изменяет определение функции.

Вы должны быть владельцем функции, чтобы использовать ALTER FUNCTION. Чтобы изменить схему функции, вам также необходимо иметь привилегию CREATE на новой схеме. Чтобы изменить владельца, вы также должны быть прямым или косвенным членом новой владеющей роли, и эта роль должна иметь привилегию CREATE на схеме функции. (Эти ограничения обеспечивают, что изменение владельца не делает ничего, что вы не могли бы сделать, удалив и создав функцию заново. Однако суперпользователь все равно может изменить владельца любой функции).

Параметры

name

Имя (опционально с указанием схемы) существующей функции. Если не указан список аргументов, имя должно быть уникальным в своей схеме.

argmode

Режим аргумента: IN, OUT, INOUT или VARIADIC. Если не указан, по умолчанию используется режим IN. Обратите внимание, что команда ALTER FUNCTION не обращает внимания на аргументы 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

Эта форма помечает функцию как зависимую от расширения или больше не зависимую от этого расширения, если указано NO. Функция, помеченная как зависимая от расширения, удаляется при удалении расширения, даже если CASCADE не указано. Функция может зависеть от нескольких расширений и будет удалена при удалении любого из этих расширений.

CALLED ON NULL INPUT
RETURNS NULL ON NULL INPUT
STRICT

CALLED ON NULL INPUT изменяет функцию таким образом, что она будет вызываться, когда один или несколько ее аргументов являются null. RETURNS NULL ON NULL INPUT или STRICT изменяет функцию таким образом, что она не будет вызываться, если хотя бы один из ее аргументов является null; вместо этого автоматически предполагается null-результат. Дополнительную информацию см. в разделе CREATE FUNCTION.

IMMUTABLE
STABLE
VOLATILE

Измените волатильность функции на указанную настройку. См. CREATE FUNCTION для получения подробной информации.

[ EXTERNAL ] SECURITY INVOKER
[ EXTERNAL ] 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

Установите или измените функцию поддержки планировщика для использования этой функции. См. Раздел 36.10 для получения подробной информации. Для использования этой опции вы должны быть суперпользователем.

Эта опция не может быть использована для полного удаления функции поддержки, так как она должна указывать на новую функцию поддержки. Используйте CREATE OR REPLACE FUNCTION, если вам это необходимо.

configuration_parameter
value

Добавьте или измените присваивание, которое должно быть сделано для параметра конфигурации при вызове функции. Если value равно DEFAULT или, эквивалентно, используется RESET, то локальная настройка функции удаляется, так что функция выполняется со значением, присутствующим в ее окружении. Используйте RESET ALL, чтобы очистить все локальные настройки функции. SET FROM CURRENT сохраняет значение параметра, которое является текущим, когда выполняется ALTER FUNCTION, как значение, которое будет применяться при входе в функцию.

См. SET и Глава 19 для получения дополнительной информации о допустимых именах параметров и их значениях.

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;

Функция теперь будет выполняться с тем поисковым путем, который используется ее вызывающей стороной.

Совместимость

Этот оператор частично совместим с оператором ALTER FUNCTION в стандарте SQL. Стандарт позволяет изменять больше свойств функции, но не предоставляет возможности переименовать функцию, сделать функцию определителем безопасности, присоединить значения параметров конфигурации к функции или изменить владельца, схему или изменчивость функции. Стандарт также требует ключевое слово RESTRICT, которое является необязательным в Tantor SE.