ALTER PROCEDURE
Эта страница переведена при помощи нейросети GigaChat.
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
изменяет определение процедуры.
Чтобы выполнить эту команду, необходимо быть владельцем процедуры. Чтобы изменить схему, необходимо также иметь привилегию CREATE
в целевой схеме.
Необходимо владеть процедурой для использования 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
).Процедура, помеченная как зависимая от расширения, будет автоматически удалена при удалении расширения, даже без указания
CASCADE
. Процедура может зависеть от нескольких расширений одновременно, и будет удалена, если удалено хотя бы одно из них.
[ EXTERNAL ] SECURITY INVOKER
[ EXTERNAL ] SECURITY DEFINER
- Определяет, будет ли процедура выполняться с правами вызывающего (
INVOKER
) или владельца (DEFINER
). Ключевое словоEXTERNAL
используется для соответствия стандарту SQL, но игнорируется PostgreSQL. Подробности об этих режимах описано в CREATE PROCEDURE.
configuration_parameter
value
- Позволяет задать или изменить значение конфигурационного параметра, которое будет применяться при вызове процедуры.
Если указано
DEFAULT
(илиRESET
), то локальная настройка параметра удаляется, и при выполнении процедуры используется значение из окружения.Команда
RESET ALL
сбрасывает все локальные настройки процедуры. ПараметрSET FROM CURRENT
сохраняет текущее значение параметра (на момент выполненияALTER PROCEDURE
) и будет применять его при каждом вызове процедуры.Смотрите SET и «Настройка сервера» для получения дополнительной информации об именах параметров и допустимых значениях.
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-стандарту. Хотя стандарт допускает изменение большего числа свойств процедур, в нем не предусмотрены следующие возможности, реализованные в PostgreSQL:
- переименование процедуры;
- назначение процедуры исполнителем с правами владельца (
SECURITY DEFINER
); - привязка конфигурационных параметров к процедуре;
- изменение владельца процедуры;
- изменение схемы;
- изменение уровня изменчивости.
Ключевое слово RESTRICT
, обязательное в стандарте, в PostgreSQL не обязательно и игнорируется.
Смотрите также
CREATE PROCEDURE, DROP PROCEDURE, ALTER FUNCTION, ALTER ROUTINE