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_USER | SESSION_USER }

ALTER PROCEDURE <name> [ ( [ [<argmode>] [<argname>] <argtype> [, ...] ] ) ]
   SET SCHEMA <new_schema>

ALTER PROCEDURE <name> [ ( [ [<argmode>] [<argname>] <argtype> [, ...] ] ) ]
   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 изменяет определение существующей процедуры.

Чтобы использовать команду ALTER PROCEDURE, вы должны быть владельцем процедуры. Чтобы изменить схему процедуры, вы также должны обладать привилегией CREATE в новой схеме. Чтобы изменить владельца, вы должны быть прямым или косвенным членом новой роли-владельца, и эта роль должна иметь привилегию CREATE на схему процедуры. (Эти ограничения гарантируют, что изменение владельца не позволяет сделать ничего такого, что нельзя было бы сделать путём удаления и повторного создания процедуры. Однако суперпользователь может изменить владельца любой процедуры.)

Параметры

  • name
    • Имя (опционально с указанием схемы) существующей процедуры. Если список аргументов не указан, имя должно быть уникальным в своей схеме.
  • argmode
    • Режим аргумента: IN или VARIADIC. Если не указано, по умолчанию используется IN.
  • argname
    • Имя аргумента. Обратите внимание, что ALTER PROCEDURE фактически не учитывает имена аргументов, поскольку для определения идентичности процедуры требуются только типы данных аргументов.
  • argtype
    • Тип(ы) данных аргументов процедуры (опционально с указанием схемы), если таковые имеются.
  • new_name
    • Новое имя процедуры.
  • new_owner
    • Новый владелец процедуры. Обратите внимание, что если процедура помечена как SECURITY DEFINER, она будет выполняться от имени нового владельца.
  • new_schema
    • Новая схема для процедуры.
  • extension_name
    • Имя расширения, от которого будет зависеть процедура.
  • [ EXTERNAL ] SECURITY INVOKER
  • [ EXTERNAL ] SECURITY DEFINER
    • Изменяет, является ли процедура SECURITY DEFINER или нет. Ключевое слово EXTERNAL игнорируется для соответствия стандарту SQL. Дополнительную информацию об этой возможности см. в разделе CREATE PROCEDURE.
  • configuration_parameter
  • value
    • Устанавливает или изменяет значение параметра конфигурации при вызове процедуры. Если указано значение DEFAULT или, эквивалентно, используется RESET, локальная для процедуры настройка удаляется, и процедура выполняется со значением, действующим в её окружении. Используйте RESET ALL, чтобы очистить все локальные настройки процедуры. SET FROM CURRENT сохраняет текущее значение параметра на момент выполнения команды ALTER PROCEDURE как значение, которое будет применяться при входе в процедуру.
    • Дополнительную информацию о допустимых именах параметров и значениях см. в команде SET.
  • RESTRICT
    • Игнорируется для соответствия стандарту SQL.

Замечания

В базе данных существуют ограничения на использование функций, определённых как STABLE или VOLATILE. Дополнительную информацию см. в разделе CREATE FUNCTION.

Примеры

Переименовать процедуру 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;

Настроить путь поиска (search path), который автоматически устанавливается для процедуры:

ALTER PROCEDURE check_password(text) SET search_path = admin, pg_temp;

Отключить автоматическую установку search_path для процедуры:

ALTER PROCEDURE check_password(text) RESET search_path;

Теперь процедура будет выполняться с тем путём поиска, который используется вызывающей стороной.

Совместимость

Данная команда частично совместима с оператором ALTER PROCEDURE стандарта SQL. Стандарт позволяет изменять больше свойств процедуры, но не предусматривает возможность переименования процедуры, назначения ей статуса SECURITY DEFINER, привязки значений параметров конфигурации к процедуре или изменения владельца, схемы или степени волатильности процедуры. В стандарте также требуется ключевое слово RESTRICT, которое в Database является необязательным.