ALTER PROCEDURE

ALTER PROCEDURE — cambiar la definición de un procedimiento

Synopsis

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

donde action es uno de:

    [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
    SET configuration_parameter { TO | = } { value | DEFAULT }
    SET configuration_parameter FROM CURRENT
    RESET configuration_parameter
    RESET ALL

Descripción

ALTER PROCEDURE cambia la definición de un procedimiento.

Debes ser el propietario del procedimiento para usar ALTER PROCEDURE. Para cambiar el esquema de un procedimiento, también debes tener el privilegio CREATE en el nuevo esquema. Para cambiar el propietario, debes ser capaz de hacer SET ROLE al nuevo rol propietario, y ese rol debe tener el privilegio CREATE en el esquema del procedimiento. (Estas restricciones garantizan que cambiar el propietario no permita hacer nada que no pudieras hacer eliminando y volviendo a crear el procedimiento. Sin embargo, un superusuario puede cambiar la propiedad de cualquier procedimiento de todos modos).

Parámetros

name

El nombre (opcionalmente calificado por esquema) de un procedimiento existente. Si no se especifica una lista de argumentos, el nombre debe ser único en su esquema.

argmode

El modo de un argumento: IN, OUT, INOUT o VARIADIC. Si se omite, el valor predeterminado es IN.

argname

El nombre de un argumento. Ten en cuenta que ALTER PROCEDURE en realidad no presta atención a los nombres de los argumentos, ya que solo se utilizan los tipos de datos de los argumentos para determinar la identidad del procedimiento.

argtype

El o los tipos de datos de los argumentos del procedimiento (opcionalmente calificados por esquema), si los hay. Consulta DROP PROCEDURE para obtener más detalles sobre cómo se busca el procedimiento utilizando el o los tipos de datos de los argumentos.

new_name

El nuevo nombre del procedimiento.

new_owner

El nuevo propietario del procedimiento. Ten en cuenta que si el procedimiento está marcado como SECURITY DEFINER, se ejecutará posteriormente como el nuevo propietario.

new_schema

El nuevo esquema para el procedimiento.

extension_name

Esta forma marca el procedimiento como dependiente de la extensión, o como ya no dependiente si se especifica NO. Un procedimiento marcado como dependiente de una extensión se elimina cuando se elimina la extensión, incluso si no se especifica cascade. Un procedimiento puede depender de múltiples extensiones y se eliminará cuando se elimine cualquiera de ellas.

[ EXTERNAL ] SECURITY INVOKER
[ EXTERNAL ] SECURITY DEFINER

Cambia si el procedimiento define la seguridad (security definer) o no. La palabra clave EXTERNAL se ignora para la conformidad con SQL. Consulta CREATE PROCEDURE para obtener más información sobre esta capacidad.

configuration_parameter
value

Agrega o cambia la asignación que se realizará a un parámetro de configuración cuando se llame al procedimiento. Si value es DEFAULT o, de manera equivalente, se usa RESET, se elimina la configuración local del procedimiento, de modo que el procedimiento se ejecute con el valor presente en su entorno. Usa RESET ALL para borrar todas las configuraciones locales del procedimiento. SET FROM CURRENT guarda el valor del parámetro que está activo cuando se ejecuta ALTER PROCEDURE como el valor que se aplicará al ingresar al procedimiento.

Consulta SET y Chapter 19 para obtener más información sobre los nombres y valores de parámetros permitidos.

RESTRICT

Ignorado para la conformidad con el estándar SQL.

Ejemplos

Para renombrar el procedimiento insert_data con dos argumentos de tipo integer a insert_record:

ALTER PROCEDURE insert_data(integer, integer) RENAME TO insert_record;

Para cambiar el propietario del procedimiento insert_data con two argumentos de tipo integer a joe:

ALTER PROCEDURE insert_data(integer, integer) OWNER TO joe;

Para cambiar el esquema del procedimiento insert_data con dos argumentos de tipo integer a accounting:

ALTER PROCEDURE insert_data(integer, integer) SET SCHEMA accounting;

Para marcar el procedimiento insert_data(integer, integer) como dependiente de la extensión myext:

ALTER PROCEDURE insert_data(integer, integer) DEPENDS ON EXTENSION myext;

Para ajustar la ruta de búsqueda (search path) que se establece automáticamente para un procedimiento:

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

Para desactivar la configuración automática de search_path para un procedimiento:

ALTER PROCEDURE check_password(text) RESET search_path;

El procedimiento ahora se ejecutará con cualquier ruta de búsqueda que use el llamador.

Compatibilidad

Esta sentencia es parcialmente compatible con la sentencia ALTER PROCEDURE en el estándar SQL. El estándar permite modificar más propiedades de un procedimiento, pero no ofrece la capacidad de renombrar un procedimiento, hacer que un procedimiento defina la seguridad (security definer), adjuntar valores de parámetros de configuración a un procedimiento, ni cambiar el propietario, esquema o volatilidad de un procedimiento. El estándar también requiere la palabra clave RESTRICT, que es opcional en PostgreSQL.

Véase también

CREATE PROCEDURE, DROP PROCEDURE, ALTER FUNCTION, ALTER ROUTINE