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 |
Режим аргумента: |
argname |
Имя аргумента.
Обратите внимание, что |
argtype |
Типы данных аргументов функции (опционально указанной со схемой), если таковые имеются |
new_name |
Новое имя функции |
new_owner |
Новый владелец функции.
Обратите внимание, что если функция помечена как |
new_schema |
Новая схема для функции |
CALLED ON NULL INPUT |
|
RETURNS NULL ON NULL INPUT |
|
STRICT |
См. |
IMMUTABLE |
Изменяет волатильность функции на указанное значение |
STABLE |
Изменяет волатильность функции на указанное значение |
VOLATILE |
Изменяет волатильность функции на указанное значение |
[ EXTERNAL ] SECURITY INVOKER [ EXTERNAL ] SECURITY DEFINER |
Изменяет, является ли функция определяющей контекст безопасности (security definer) или нет.
Ключевое слово |
LEAKPROOF |
Изменяет, считается ли функция герметичной (leakproof) или нет |
COST <execution_cost> |
Изменяет предполагаемую стоимость выполнения функции |
configuration_parameter, value |
Добавляет или изменяет присваивание, которое будет сделано параметру конфигурации при вызове функции.
Если |
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.