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имя[ ( [ [режим_аргумента] [имя_аргумента]тип_аргумента[, ...] ] ) ] [ NO ] 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строк_в_результатеSUPPORTвспомогательная_функция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, в дальнейшем она будет выполняться от имени нового владельца.
- новая_схема
- Новая схема функции. 
- DEPENDS ON EXTENSION- имя_расширения- NO DEPENDS ON EXTENSION- имя_расширения
- Эта форма делает функцию зависимой от расширения или, наоборот, удаляет эту зависимость, если указывается - NO. Функция, помеченная как зависимая от расширения, автоматически удаляется при удалении расширения.
- 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. 
- SUPPORT- вспомогательная_функция
- Задаёт или меняет вспомогательную функцию для планировщика, которая будет использоваться с этой функцией. За подробностями обратитесь к Разделу 35.11. Для использования этого указания нужно быть суперпользователем. - Имя новой вспомогательной функции является обязательным, поэтому данное указание не позволяет полностью отказаться от использования вспомогательной функции. Если вам требуется это, воспользуйтесь командой - CREATE OR REPLACE 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 оно не требуется.