ALTER FUNCTION
ALTER FUNCTION — изменить определение функции
Синтаксис
ALTER FUNCTIONимя
[ ( [ [режим_аргумента
] [имя_аргумента
]тип_аргумента
[, ...] ] ) ]действие
[ ... ] [ RESTRICT ] ALTER FUNCTIONимя
[ ( [ [режим_аргумента
] [имя_аргумента
]тип_аргумента
[, ...] ] ) ] RENAME TOновое_имя
ALTER FUNCTIONимя
[ ( [ [режим_аргумента
] [имя_аргумента
]тип_аргумента
[, ...] ] ) ] OWNER TO {новый_владелец
| CURRENT_USER | SESSION_USER } ALTER FUNCTIONимя
[ ( [ [режим_аргумента
] [имя_аргумента
]тип_аргумента
[, ...] ] ) ] SET SCHEMAновая_схема
ALTER FUNCTIONимя
[ ( [ [режим_аргумента
] [имя_аргумента
]тип_аргумента
[, ...] ] ) ] DEPENDS ON EXTENSIONимя_расширения
Гдедействие
может быть следующим: 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стоимость_выполнения
ROWSстрок_в_результате
SETпараметр_конфигурации
{ TO | = } {значение
| DEFAULT } SETпараметр_конфигурации
FROM CURRENT RESETпараметр_конфигурации
RESET ALL
Описание
ALTER FUNCTION
изменяет определение функции.
Выполнить ALTER FUNCTION
может только владелец соответствующей функции. Чтобы сменить схему функции, необходимо также иметь право CREATE
в новой схеме. Чтобы сменить владельца, требуется также быть непосредственным или опосредованным членом новой роли, а эта роль должна иметь право CREATE
в схеме функции. (С такими ограничениями при смене владельца не происходит ничего такого, что нельзя было бы сделать, имея право удалить и вновь создать функцию. Однако суперпользователь может сменить владельца функции в любом случае.)
Параметры
имя
Имя существующей функции (возможно, дополненное схемой). Если список аргументов не указан, это имя должно быть уникальным в схеме.
режим_аргумента
Режим аргумента:
IN
,OUT
,INOUT
илиVARIADIC
. По умолчанию подразумеваетсяIN
. Заметьте, чтоALTER FUNCTION
не учитывает аргументыOUT
, так как для идентификации функции нужны только типы входных аргументов. Поэтому достаточно перечислить только аргументыIN
,INOUT
иVARIADIC
.имя_аргумента
Имя аргумента. Заметьте, что на самом деле
ALTER FUNCTION
не обращает внимание на имена аргументов, так как для однозначной идентификации функции достаточно только типов аргументов.тип_аргумента
Тип данных аргументов функции (возможно, дополненный именем схемы), если таковые имеются.
новое_имя
Новое имя функции.
новый_владелец
Новый владелец функции. Заметьте, что если функция помечена как
SECURITY DEFINER
, в дальнейшем она будет выполняться от имени нового владельца.новая_схема
Новая схема функции.
имя_расширения
Имя расширения, от которого будет зависеть функция.
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
стоимость_выполнения
Изменяет ориентировочную стоимость выполнения функции. Подробнее это описывается в CREATE FUNCTION.
ROWS
строк_в_результате
Изменяет ориентировочное число строк в результате функции, возвращающей множество. Подробнее это описывается в CREATE FUNCTION.
параметр_конфигурации
значение
Добавляет или изменяет установку параметра конфигурации, выполняемую при вызове функции. Если задано
значение
DEFAULT
или, что равнозначно, выполняется действиеRESET
, локальное переопределение для функции удаляется и функция выполняется со значением, установленным в окружении. Для удаления всех установок параметров для данной функции укажитеRESET ALL
.SET FROM CURRENT
устанавливает для последующих вызовов функции значение параметра, действующее в момент выполненияALTER PROCEDURE
.За подробными сведениями об именах и значениях параметров обратитесь к SET и Главе 18.
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
считается обязательным, тогда как в Postgres Pro оно не требуется.