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
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
- Изменяет, является ли функция функцией с правами определяющего пользователя (security definer). Ключевое слово EXTERNAL игнорируется для обеспечения согласованности с SQL. Дополнительную информацию об этой возможности см. в описании команды CREATE FUNCTION.
LEAKPROOF
- Изменяет, считается ли функция защищённой от утечек (leak-proof). Дополнительную информацию об этой возможности см. в описании команды CREATE FUNCTION.
EXECUTE ON ANY
EXECUTE ON MASTER
EXECUTE ON ALL SEGMENTS
EXECUTE ON INITPLAN
- Свойство EXECUTE ON определяет место выполнения функции (главный экземпляр или экземпляр сегмента) во время выполнения запроса.
EXECUTE ON ANY (по умолчанию) означает, что функция может выполняться на главном сервере или любом экземпляре сегмента и возвращает одинаковый результат независимо от места выполнения. База данных YMatrix определяет, где именно будет выполняться функция.
EXECUTE ON MASTER означает, что функция должна выполняться только на главном экземпляре.
EXECUTE ON ALL SEGMENTS означает, что при каждом вызове функция должна выполняться на всех основных экземплярах сегментов, но не на главном узле. Общий результат такой функции представляет собой объединение результатов со всех экземпляров сегментов (UNION ALL).
Дополнительную информацию о свойстве EXECUTE ON см. в описании команды CREATE FUNCTION.
EXECUTE ON INITPLAN означает, что функция содержит SQL-операторы, которые необходимо распределить на узлы сегментов для выполнения, и требует специальной обработки со стороны Master, если это возможно.
COST execution_cost
- Изменяет оценочную стоимость выполнения функции. Дополнительную информацию см. в описании команды CREATE FUNCTION.
configuration_parameter
value
- При вызове функции производится дополнительное или изменённое назначение значения параметра конфигурации. Если указано значение DEFAULT или используется эквивалент R ESET, локальные настройки функции будут удалены, и функция будет выполняться с использованием значений, действующих в её окружении. Используйте RESET ALL, чтобы очистить локальные настройки всех функций. SET FROM CURRENT устанавливает текущее значение сессии приложения на момент входа в функцию.
RESTRICT
Примечание
База данных YMatrix накладывает ограничения, такие как STABLE или VOLATILE, на определённые функции. Дополнительную информацию см. в описании команды CREATE FUNCTION.
Пример
Переименовать функцию sqrt целочисленного типа в square_root:
ALTER FUNCTION sqrt(integer) RENAME TO square_root;
Изменить владельца функции sqrt целочисленного типа на joe:
ALTER FUNCTION sqrt(integer) OWNER TO joe;
Изменить схему функции sqrt целочисленного типа на math:
ALTER FUNCTION sqrt(integer) SET SCHEMA math;
Настроить автоматический путь поиска функции:
ALTER FUNCTION check_password(text) RESET search_path;
Совместимость
Данная команда частично совместима с оператором ALTER FUNCTION стандарта SQL. Стандарт позволяет изменять больше свойств функции, но не предусматривает таких возможностей, как переименование функции, пометка функции как SECURITY DEFINER, привязка значений параметров конфигурации к функции или изменение владельца, схемы или степени стабильности функции. В стандарте также требуется ключевое слово RESTRICT, которое в базе данных YMatrix является необязательным.
Смотрите также
CREATE FUNCTION , DROP FUNCTION