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