ALTER PROCEDURE
ALTER PROCEDURE — изменить определение процедуры
Синтаксис
ALTER PROCEDURE имя [ ( [ [ режим_аргумента ] [ имя_аргумента ] тип_аргумента [, ...] ] ) ]
действие [ ... ] [ RESTRICT ]
ALTER PROCEDURE имя [ ( [ [ режим_аргумента ] [ имя_аргумента ] тип_аргумента [, ...] ] ) ]
RENAME TO новое_имя
ALTER PROCEDURE имя [ ( [ [ режим_аргумента ] [ имя_аргумента ] тип_аргумента [, ...] ] ) ]
OWNER TO { новый_владелец | CURRENT_USER | SESSION_USER }
ALTER PROCEDURE имя [ ( [ [ режим_аргумента ] [ имя_аргумента ] тип_аргумента [, ...] ] ) ]
SET SCHEMA новая_схема
ALTER PROCEDURE имя [ ( [ [ режим_аргумента ] [ имя_аргумента ] тип_аргумента [, ...] ] ) ]
DEPENDS ON EXTENSION имя_расширения
Где действие может быть следующим:
[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
SET параметр_конфигурации { TO | = } { значение | DEFAULT }
SET параметр_конфигурации FROM CURRENT
RESET параметр_конфигурации
RESET ALL
Описание
Команда ALTER PROCEDURE
изменяет определение процедуры.
Чтобы использовать команду ALTER PROCEDURE
, нужно быть владельцем
соответствующей процедуры. Чтобы изменить схему процедуры, необходимо помимо этого
иметь право CREATE в новой схеме. Для смены владельца текущий пользователь также
должен быть непосредственным или опосредованным членом новой роли-владельца, и
эта роль должна иметь право CREATE в схеме процедуры.
(Эти ограничения направлены на то, чтобы при смене владельца не происходило ничего,
что нельзя было бы сделать путем удаления и повторного создания процедуры.
Однако суперпользователь всё равно может сменить владельца любой
процедуры.)
Параметры
имя
Имя существующей процедуры (может быть дополнено схемой). Если не указан список аргументов, имя должно быть уникальным в ее схеме.
режим_аргумента
Режим аргумента: IN или VARIADIC. По умолчанию равно IN.
имя_аргумента
Название аргумента. Обратите внимание, что ALTER PROCEDURE
фактически
не обращает никакого внимания на имена аргументов, поскольку для
определения идентичности процедуры необходимы только типы данных
аргументов.
тип_аргумента
Тип(ы) данных аргументов процедуры (возможно, дополненный(ые) схемой), если таковые имеются.
новое_имя
Новое имя процедуры.
новый_владелец
Новый владелец функции. Обратите внимание, что если процедура помечена как SECURITY DEFINER, в дальнейшем она будет выполняться от имени нового владельца.
новая_схема
Новая схема для процедуры.
имя_расширения
Имя расширения, от которого будет зависеть процедура.
[EXTERNAL] SECURITY INVOKER
[EXTERNAL] SECURITY DEFINER
Устанавливает, является ли процедура определяющей контекст безопасности. Ключевое слово EXTERNAL игнорируется для соответствия стандарту SQL. Дополнительную информацию об этой возможности см. в разделе CREATE PROCEDURE.
параметр_конфигурации
значение
Добавляет или изменяет установку параметра конфигурации, выполняемую при вызове процедуры.
Если задано значение DEFAULT или равнозначное указание RESET,
локальное переопределение для процедуры удаляется и функция выполняется со значением,
установленным в окружении. Для удаления всех установок параметров процедуры
укажите RESET ALL. SET FROM CURRENT устанавливает для последующих вызовов процедуры
значение параметра, действующее в момент выполнения команды ALTER FUNCTION
.
Дополнительную информацию о допустимых именах и значениях параметров см. в разделе 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. Стандарт позволяет изменять больше свойств процедуры, но
не предоставляет возможности переименовать процедуру, сделать процедуру
определяющей контекст безопасности, связать с процедурой значения параметров
конфигурации или изменить владельца, схему или характеристику изменчивости
процедуры. Стандарт также требует обязательного наличия слова RESTRICT,
которое является необязательным в QHB.
См. также
CREATE PROCEDURE, DROP PROCEDURE, ALTER FUNCTION, ALTER ROUTINE