ALTER PROCEDURE — изменение определения процедуры
ALTER PROCEDUREname[ ( [ [argmode] [argname]argtype[, ...] ] ) ]action[ ... ] [ RESTRICT ] ALTER PROCEDUREname[ ( [ [argmode] [argname]argtype[, ...] ] ) ] RENAME TOnew_nameALTER PROCEDUREname[ ( [ [argmode] [argname]argtype[, ...] ] ) ] OWNER TO {new_owner| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER PROCEDUREname[ ( [ [argmode] [argname]argtype[, ...] ] ) ] SET SCHEMAnew_schemaALTER PROCEDUREname[ ( [ [argmode] [argname]argtype[, ...] ] ) ] [ NO ] DEPENDS ON EXTENSIONextension_nameгдеactionможет быть одним из: [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER SETconfiguration_parameter{ TO | = } {value| DEFAULT } SETconfiguration_parameterFROM CURRENT RESETconfiguration_parameterRESET ALL
Команда ALTER PROCEDURE изменяет определение
процедуры.
Чтобы использовать ALTER PROCEDURE, вы должны быть владельцем процедуры.
Чтобы изменить схему процедуры, вы также должны иметь право CREATE
в новой схеме.
Чтобы изменить владельца, вы должны иметь возможность выполнить SET ROLE для
новой роли-владельца, и эта роль должна иметь право 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_parametervalue
Добавляет или изменяет присваивание параметра конфигурации,
которое должно быть выполнено при вызове процедуры. Если
value — это DEFAULT
или, что равносильно, используется RESET, то
установка на уровне процедуры удаляется, так что процедура выполняется со значением,
присутствующим в её окружении. Используйте RESET
ALL для очистки всех установок на уровне процедуры.
SET FROM CURRENT сохраняет значение параметра,
которое действует на момент выполнения ALTER PROCEDURE, в качестве значения,
которое должно быть применено при входе в процедуру.
См. SET и Глава 3.4 для получения дополнительной информации о допустимых именах параметров и их значениях.
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, которое в
Digital Q.DataBase является необязательным.