Перейти к основному содержимому

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