Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

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>

ALTER FUNCTION <name> ( [ [<argmode>] [<argname>] <argtype> [, ...] ] )
   SET SCHEMA <new_schema>

где action может быть следующим:

    {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT}
    {IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF}
    {[EXTERNAL] SECURITY INVOKER | [EXTERNAL] SECURITY DEFINER}
    EXECUTE ON { ANY | MASTER | ALL SEGMENTS | INITPLAN }
    COST <execution_cost>
    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

Новая схема для функции

CALLED ON NULL INPUT

CALLED ON NULL INPUT меняет функцию так, что она будет вызываться, когда некоторые или все ее аргументы равны null

RETURNS NULL ON NULL INPUT

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

STRICT

См. RETURNS NULL ON NULL INPUT

IMMUTABLE

Изменяет волатильность функции на указанное значение

STABLE

Изменяет волатильность функции на указанное значение

VOLATILE

Изменяет волатильность функции на указанное значение

[ EXTERNAL ] SECURITY INVOKER

[ EXTERNAL ] SECURITY DEFINER

Изменяет, является ли функция определяющей контекст безопасности (security definer) или нет. Ключевое слово EXTERNAL игнорируется для соответствия стандарту SQL

LEAKPROOF

Изменяет, считается ли функция герметичной (leakproof) или нет

COST <execution_cost>

Изменяет предполагаемую стоимость выполнения функции

configuration_parameter, value

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

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;

Настроить путь поиска, который автоматически устанавливается для функции:

ALTER FUNCTION check_password(text) SET search_path = admin, pg_temp;

Отключить автоматическую установку search_path для функции:

ALTER FUNCTION check_password(text) RESET search_path;

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

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

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

См. также