ALTER PROCEDURE
ALTER PROCEDURE — изменить определение процедуры
Синтаксис
ALTER PROCEDUREимя[ ( [ [режим_аргумента] [имя_аргумента]тип_аргумента[, ...] ] ) ]действие[ ... ] [ RESTRICT ] ALTER PROCEDUREимя[ ( [ [режим_аргумента] [имя_аргумента]тип_аргумента[, ...] ] ) ] RENAME TOновое_имяALTER PROCEDUREимя[ ( [ [режим_аргумента] [имя_аргумента]тип_аргумента[, ...] ] ) ] OWNER TO {новый_владелец| CURRENT_USER | SESSION_USER } ALTER PROCEDUREимя[ ( [ [режим_аргумента] [имя_аргумента]тип_аргумента[, ...] ] ) ] SET SCHEMAновая_схемаALTER PROCEDUREимя[ ( [ [режим_аргумента] [имя_аргумента]тип_аргумента[, ...] ] ) ] [ NO ] DEPENDS ON EXTENSIONимя_расширенияГдедействиеможет быть следующим: [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER SETпараметр_конфигурации{ TO | = } {значение| DEFAULT } SETпараметр_конфигурацииFROM CURRENT RESETпараметр_конфигурацииRESET ALL
Описание
ALTER PROCEDURE изменяет определение процедуры.
Выполнить ALTER PROCEDURE может только владелец процедуры. Чтобы сменить схему процедуры, необходимо также иметь право CREATE в новой схеме. Чтобы сменить владельца, требуется также быть непосредственным или опосредованным членом новой роли, а эта роль должна иметь право CREATE в схеме представления. (С таким ограничениями при смене владельца не происходит ничего такого, что нельзя было бы сделать, имея право удалить и вновь создать процедуру. Однако суперпользователь может сменить владельца процедуры в любом случае.)
Параметры
имяИмя существующей процедуры (возможно, дополненное схемой). Если список аргументов не указан, имя процедуры должно быть уникальным в её схеме.
режим_аргументаРежим аргумента:
INилиVARIADIC. По умолчанию подразумеваетсяIN.имя_аргументаИмя аргумента. Заметьте, что на самом деле
ALTER PROCEDUREне обращает внимание на имена аргументов, так как для однозначной идентификации процедуры достаточно только типов аргументов.тип_аргументаТип данных аргументов процедуры (возможно, дополненный именем схемы), если таковые имеются.
новое_имяНовое имя процедуры.
новый_владелецНовый владелец процедуры. Заметьте, что если процедура помечена как
SECURITY DEFINER, в дальнейшем она будет выполняться от имени нового владельца.новая_схемаНовая схема процедуры.
имя_расширенияЭта форма делает процедуру зависимой от расширения или, наоборот, удаляет эту зависимость, если указывается
NO. Процедура, помеченная как зависимая от расширения, удаляется при удалении расширения даже без указанияCASCADE. Если процедура зависит от нескольких расширений, она удаляется при удалении любого из этих расширений.[EXTERNAL] SECURITY INVOKER[EXTERNAL] SECURITY DEFINERУстанавливает, является ли процедура определяющей контекст безопасности. Ключевое слово
EXTERNALигнорируется для соответствия стандарту SQL. Подробнее это свойство описано в CREATE PROCEDURE.параметр_конфигурациизначениеДобавляет или изменяет установку параметра конфигурации, выполняемую при вызове процедуры. Если задано
значениеDEFAULTили, что равнозначно, выполняется действиеRESET, локальное переопределение для процедуры удаляется и процедура выполняется со значением, установленным в окружении. Для удаления всех установок параметров для данной процедуры укажитеRESET ALL.SET FROM CURRENTустанавливает для последующих вызовов процедуры значение параметра, действующее в момент выполненияALTER PROCEDURE.За подробными сведениями об именах и значениях параметров обратитесь к SET и Главе 19.
RESTRICTИгнорируется для соответствия стандарту SQL.
Примеры
Переименование процедуры insert_data с двумя аргументами типа integer в insert_record:
ALTER PROCEDURE insert_data(integer, integer) RENAME TO insert_record;
Смена владельца процедуры insert_data с двумя аргументами типа integer на joe:
ALTER PROCEDURE insert_data(integer, integer) OWNER TO joe;
Смена схемы процедуры insert_data с двумя аргументами типа integer на accounting:
ALTER PROCEDURE insert_data(integer, integer) SET SCHEMA accounting;
Обозначение процедуры insert_data(integer, integer) как зависимой от расширения myext:
ALTER PROCEDURE insert_data(integer, integer) DEPENDS ON EXTENSION myext;
Изменение пути поиска, который устанавливается автоматически для процедуры:
ALTER PROCEDURE check_password(text) SET search_path = admin, pg_temp;
Отмена автоматического определения search_path для процедуры:
ALTER PROCEDURE check_password(text) RESET search_path;
Теперь процедура будет выполняться с тем путём, который задан в момент вызова.
Совместимость
Этот оператор частично совместим с оператором ALTER PROCEDURE в стандарте SQL. Стандарт позволяет изменить больше свойств процедуры, но не даёт возможности переименовать процедуру, сделать процедуру определяющей контекст безопасности, связать с процедурой значения параметров конфигурации или изменить владельца, схему или характеристику изменчивости процедуры. Также стандарт требует наличия ключевого слова RESTRICT, но в PostgreSQL оно необязательное.