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