ALTER FUNCTION

ALTER FUNCTION — cambiar la definición de una función

Synopsis

ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    action [ ... ] [ RESTRICT ]
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    RENAME TO new_name
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    SET SCHEMA new_schema
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    [ NO ] DEPENDS ON EXTENSION extension_name

donde action puede ser uno de los siguientes:

    CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
    IMMUTABLE | STABLE | VOLATILE
    [ NOT ] LEAKPROOF
    [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
    PARALLEL { UNSAFE | RESTRICTED | SAFE }
    COST execution_cost
    ROWS result_rows
    SUPPORT support_function
    SET configuration_parameter { TO | = } { value | DEFAULT }
    SET configuration_parameter FROM CURRENT
    RESET configuration_parameter
    RESET ALL

Descripción

ALTER FUNCTION cambia la definición de una función.

Debes ser el propietario de la función para usar ALTER FUNCTION. Para cambiar el esquema de una función, también debes tener el privilegio CREATE en el nuevo esquema. Para alterar el propietario, debes poder hacer SET ROLE al nuevo rol propietario, y ese rol debe tener el privilegio CREATE en el esquema de la función. (Estas restricciones garantizan que al cambiar el propietario no puedas hacer nada que no pudieras hacer eliminando y recreando la función. Sin embargo, un superusuario puede cambiar la propiedad de cualquier función de todos modos).

Parámetros

name

El nombre (opcionalmente calificado por esquema) de una función 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. Ten en cuenta que ALTER FUNCTION en realidad no presta atención a los argumentos OUT, ya que solo se necesitan los argumentos de entrada para determinar la identidad de la función. Por lo tanto, es suficiente listar los argumentos IN, INOUT y VARIADIC.

argname

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

argtype

El tipo o tipos de datos de los argumentos de la función (opcionalmente calificados por esquema), si los hay.

new_name

El nuevo nombre de la función.

new_owner

El nuevo propietario de la función. Ten en cuenta que si la función está marcada como SECURITY DEFINER, se ejecutará posteriormente con los privilegios del nuevo propietario.

new_schema

El nuevo esquema para la función.

DEPENDS ON EXTENSION extension_name
NO DEPENDS ON EXTENSION extension_name

Esta forma marca la función como dependiente de la extensión, o ya no dependiente de esa extensión si se especifica NO. Una función marcada como dependiente de una extensión se elimina cuando se elimina la extensión, incluso si no se especifica CASCADE. Una función puede depender de múltiples extensiones y se eliminará cuando cualquiera de ellas se elimine.

CALLED ON NULL INPUT
RETURNS NULL ON NULL INPUT
STRICT

CALLED ON NULL INPUT cambia la función para que sea invocada cuando algunos o todos sus argumentos sean nulos. RETURNS NULL ON NULL INPUT o STRICT cambian la función para que no sea invocada si alguno de sus argumentos es nulo; en su lugar, se asume automáticamente un resultado nulo. Consulta CREATE FUNCTION para obtener más información.

IMMUTABLE
STABLE
VOLATILE

Cambia la volatilidad de la función a la configuración especificada. Consulta CREATE FUNCTION para obtener más detalles.

[ EXTERNAL ] SECURITY INVOKER
[ EXTERNAL ] SECURITY DEFINER

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

PARALLEL

Cambia si la función se considera segura para el paralelismo. Consulta CREATE FUNCTION para obtener más detalles.

LEAKPROOF

Cambia si la función se considera a prueba de filtraciones (leakproof) o no. Consulta CREATE FUNCTION para obtener más información sobre esta capacidad.

COST execution_cost

Cambia el costo estimado de ejecución de la función. Consulta CREATE FUNCTION para obtener más información.

ROWS result_rows

Cambia el número estimado de filas devueltas por una función que devuelve un conjunto. Consulta CREATE FUNCTION para obtener más información.

SUPPORT support_function

Establece o cambia la función de soporte del planificador que se utilizará para esta función. Consulta la Section 36.11 para obtener más detalles. Debes ser superusuario para utilizar esta opción.

Esta opción no se puede utilizar para eliminar la función de soporte por completo, ya que debe nombrar una nueva función de soporte. Usa CREATE OR REPLACE FUNCTION si necesitas hacer eso.

configuration_parameter
value

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

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

RESTRICT

Se ignora para la conformidad con el estándar SQL.

Ejemplos

Para renombrar la función sqrt para el tipo integer a square_root:

ALTER FUNCTION sqrt(integer) RENAME TO square_root;

Para cambiar el propietario de la función sqrt para el tipo integer a joe:

ALTER FUNCTION sqrt(integer) OWNER TO joe;

Para cambiar el esquema de la función sqrt para el tipo integer a maths:

ALTER FUNCTION sqrt(integer) SET SCHEMA maths;

Para marcar la función sqrt para el tipo integer como dependiente de la extensión mathlib:

ALTER FUNCTION sqrt(integer) DEPENDS ON EXTENSION mathlib;

Para ajustar la ruta de búsqueda (search path) que se establece automáticamente para una función:

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

Para desactivar la configuración automática de search_path para una función:

ALTER FUNCTION check_password(text) RESET search_path;

La función ahora se ejecutará con cualquier ruta de búsqueda que utilice su invocador.

Compatibilidad

Esta sentencia es parcialmente compatible con la sentencia ALTER FUNCTION del estándar SQL. El estándar permite modificar más propiedades de una función, pero no proporciona la capacidad de renombrar una función, hacer que una función sea security definer, asociar valores de parámetros de configuración a una función, o cambiar el propietario, el esquema o la volatilidad de una función. El estándar también requiere la palabra clave RESTRICT, la cual es opcional en PostgreSQL.

Véase también

CREATE FUNCTION, DROP FUNCTION, ALTER PROCEDURE, ALTER ROUTINE