ALTER PROCEDURE
ALTER PROCEDURE — изменить определение процедуры
Синтаксис
ALTER PROCEDUREимя
[ ( [ [режим_аргумента
] [имя_аргумента
]тип_аргумента
[, ...] ] ) ]действие
[ ... ] [ RESTRICT ] ALTER PROCEDUREимя
[ ( [ [режим_аргумента
] [имя_аргумента
]тип_аргумента
[, ...] ] ) ] RENAME TOновое_имя
ALTER PROCEDUREимя
[ ( [ [режим_аргумента
] [имя_аргумента
]тип_аргумента
[, ...] ] ) ] OWNER TO {новый_владелец
| CURRENT_ROLE | 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
,OUT
,INOUT
илиVARIADIC
. По умолчанию подразумеваетсяIN
.имя_аргумента
Имя аргумента. Заметьте, что на самом деле
ALTER PROCEDURE
не обращает внимание на имена аргументов, так как для идентификации процедуры используются только их типы.тип_аргумента
Тип данных аргументов процедуры (возможно, дополненный именем схемы), если таковые имеются. Подробнее о том, как находится нужная процедура по типам аргументов, рассказывается в описании DROP 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 и Главе 20.
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 оно необязательное.