ALTER PROCEDURE#
ALTER PROCEDURE
ALTER PROCEDURE — изменить определение процедуры
Синтаксис
ALTER PROCEDUREname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ]action
[ ... ] [ RESTRICT ] ALTER PROCEDUREname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] RENAME TOnew_name
ALTER PROCEDUREname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] OWNER TO {new_owner
| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER PROCEDUREname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] SET SCHEMAnew_schema
ALTER PROCEDUREname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] [ NO ] DEPENDS ON EXTENSIONextension_name
whereaction
is one of: [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER SETconfiguration_parameter
{ TO | = } {value
| DEFAULT } SETconfiguration_parameter
FROM CURRENT RESETconfiguration_parameter
RESET 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_parameter
value
Добавьте или измените присваивание, которое будет сделано параметру конфигурации при вызове процедуры. Если
value
равноDEFAULT
или, что эквивалентно, используетсяRESET
, то локальная настройка процедуры удаляется, так что процедура выполняется со значением, присутствующим в ее окружении. ИспользуйтеRESET ALL
, чтобы очистить все локальные настройки процедуры.SET FROM CURRENT
сохраняет значение параметра, которое является текущим, когда выполняетсяALTER PROCEDURE
, как значение, которое будет применяться при входе в процедуру.См. SET и Глава 18 для получения дополнительной информации о допустимых именах параметров и их значениях.
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 BE.