ALTER PROCEDURE#

ALTER PROCEDURE

ALTER PROCEDURE

ALTER PROCEDURE — изменить определение процедуры

Синтаксис

ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    action [ ... ] [ RESTRICT ]
ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    RENAME TO new_name
ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    SET SCHEMA new_schema
ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    [ NO ] DEPENDS ON EXTENSION extension_name

where action is one of:

    [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
    SET configuration_parameter { TO | = } { value | DEFAULT }
    SET configuration_parameter FROM CURRENT
    RESET configuration_parameter
    RESET ALL

Описание

ALTER PROCEDURE изменяет определение процедуры.

Вы должны быть владельцем процедуры, чтобы использовать ALTER PROCEDURE. Чтобы изменить схему процедуры, у вас также должны быть привилегии CREATE на новую схему. Чтобы изменить владельца, вы также должны быть прямым или косвенным членом новой роли-владельца, и у этой роли должны быть привилегии CREATE на схему процедуры. (Эти ограничения обеспечивают, что изменение владельца не делает ничего, что нельзя было бы сделать, удалив и создав процедуру заново. Однако суперпользователь может все равно изменить владельца любой процедуры).

Параметры

name

Имя (опционально с указанием схемы) существующей процедуры. Если не указан список аргументов, имя должно быть уникальным в своей схеме.

argmode

Режим аргумента: IN, OUT, INOUT или VARIADIC. Если не указан, используется значение по умолчанию - IN.

argname

Имя аргумента. Обратите внимание, что ALTER PROCEDURE фактически не обращает внимания на имена аргументов, поскольку только типы данных аргументов используются для определения идентификатора процедуры.

argtype

Тип(ы) данных аргументов процедуры (опционально с указанием схемы), если они есть. См. DROP PROCEDURE для получения более подробной информации о том, как процедура ищется с использованием типа(ов) данных аргументов.

new_name

Новое имя процедуры.

new_owner

Новый владелец процедуры. Обратите внимание, что если процедура помечена как SECURITY DEFINER, она будет выполняться от имени нового владельца.

new_schema

Новая схема для процедуры.

extension_name

Эта форма помечает процедуру как зависимую от расширения или больше не зависимую от расширения, если указано NO. Процедура, помеченная как зависимая от расширения, удаляется при удалении расширения, даже если не указано каскадное удаление. Процедура может зависеть от нескольких расширений и будет удалена при удалении любого из этих расширений.

[ EXTERNAL ] SECURITY INVOKER
[ EXTERNAL ] SECURITY DEFINER

Измените, является ли процедура определителем безопасности или нет. Ключевое слово EXTERNAL игнорируется для соответствия SQL. См. CREATE PROCEDURE для получения дополнительной информации об этой возможности.

configuration_parameter
value

Добавьте или измените присваивание, которое будет сделано параметру конфигурации при вызове процедуры. Если value равно 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, которое является необязательным в Tantor SE.