Documentation PostgreSQL 14.22 » Référence » Commandes SQL » ALTER FUNCTION

Précédent | Niveau supérieur | Suivant
ALTER FOREIGN TABLE | Sommaire | ALTER GROUP

## ALTER FUNCTION

ALTER FUNCTION — Modifier la définition d'une fonction

## Synopsis

    ALTER FUNCTION nom [ ( [ [ mode_arg ] [ nom_arg ] type_arg [, ...] ] ) ]
         action [ ... ] [ RESTRICT ]
    ALTER FUNCTION nom [ ( [ [ mode_arg ] [ nom_arg ] type_arg [, ...] ] ) ]
         REnom TO nouveau_nom
    ALTER FUNCTION nom [ ( [ [ mode_arg ] [ nom_arg ] type_arg [, ...] ] ) ]
         OWNER TO { nouveau_proprietaire | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
    ALTER FUNCTION nom [ ( [ [ mode_arg ] [ nom_arg ] type_arg [, ...] ] ) ]
         SET SCHEMA nouveau_schema
    ALTER FUNCTION nom [ ( [ [ mode_arg ] [ nom_arg ] type_arg [, ...] ] ) ]
         [ NO ] DEPENDS ON EXTENSION nom_extension

    où action peut être :

        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 cout_execution
        ROWS nb_lignes_resultat
        SUPPORT support_function
        SET parametre { TO | = } { valeur | DEFAULT }
        SET parametre FROM CURRENT
        RESET parametre
        RESET ALL

## Description

`ALTER FUNCTION` modifie la définition d'une fonction.

Seul le propriétaire de la fonction peut utiliser `ALTER FUNCTION`. Le privilège `CREATE` sur le nouveau schéma est requis pour pouvoir changer le schéma de la fonction. Pour modifier le propriétaire, il est nécessaire d'être membre direct ou indirect du nouveau rôle propriétaire. Ce dernier doit posséder le droit `CREATE` sur le schéma de la fonction. Ces restrictions assurent que la modification du propriétaire n'a pas d'effets autres que ceux obtenus par la suppression et la re-création de la fonction ; toutefois, un super-utilisateur peut modifier le propriétaire de n'importe quelle fonction.

## Paramètres

`nom`

  Le nom de la fonction (potentiellement qualifié du nom du schéma). Si aucune liste d'argument n'est spécifiée, le nom doit être unique dans son schéma.

`modearg`

  Le mode d'un argument : `IN`, `OUT`, `INOUT` ou `VARIADIC`. En cas d'omission, la valeur par défaut est `IN`. `ALTER FUNCTION` ne tient pas compte des arguments `OUT`, car seuls les arguments en entrée sont nécessaire pour déterminer l'identité de la fonction. Les arguments `IN`, `INOUT` et `VARIADIC` sont donc suffisants.

`nomarg`

  Le nom d'un argument. `ALTER FUNCTION` ne tient pas compte des noms des arguments, car seuls les types de données des arguments sont nécessaires pour déterminer l'identité d'une fonction.

`typearg`

  Le(s) type(s) de données des arguments de la fonction (éventuellement qualifié(s) du nom du schéma).

`nouveau_nom`

  Le nouveau nom de la fonction.

`nouveau_proprietaire`

  Le nouveau propriétaire de la fonction. Si cette fonction est marquée `SECURITY DEFINER`, elle s'exécute par la suite sous cette identité.

`nouveau_schema`

  Le nouveau schéma de la fonction.

`DEPENDS ON EXTENSION `nom_extension``
`NO DEPENDS ON EXTENSION `nom_extension``

  Cette clause marque la fonction comme dépendante de l'extension ou comme indépendante de l'extension si le mot-clé `NO` est ajouté. Une fonction dépendante d'une extension est supprimée quand l'extension est supprimée, même si la clause `CASCADE` n'est pas indiquée. Une fonction peut dépendre de plusieurs extensions, et est supprimé quand une de ces extensions est supprimée.

`CALLED ON NULL INPUT`
`RETURNS NULL ON NULL INPUT`
`STRICT`

  `CALLED ON NULL INPUT` modifie la fonction pour qu'elle puisse être appelée avec des arguments NULL. `RETURNS NULL ON NULL INPUT` et `STRICT` modifie la fonction pour qu'elle ne soit pas appelée si un des arguments est NULL ; un résultat NULL est alors automatiquement déterminé. Voir CREATE FUNCTION pour plus d'informations.

`IMMUTABLE`
`STABLE`
`VOLATILE`

  Modifie la volatilité de la fonction. Voir CREATE FUNCTION pour plus d'informations.

`[ EXTERNAL ] SECURITY INVOKER`
`[ EXTERNAL ] SECURITY DEFINER`

  Précise si la fonction doit être appelée avec les droits de l'utilisateur qui l'a créée. Le mot clé `EXTERNAL`, ignoré, existe pour des raisons de compatibilité SQL. Voir CREATE FUNCTION pour plus d'informations.

`PARALLEL`

  Indique si la fonction peut être exécutée en parallèle. Voir CREATE FUNCTION pour les détails.

`LEAKPROOF`

  Indique si la fonction doit être considérée comme étant étanche (leakproof). Voir CREATE FUNCTION pour plus d'informations.

`COST` `cout_execution`

  Modifie l'estimation du coût d'exécution de la fonction. Voir CREATE FUNCTION pour plus d'informations.

`ROWS` `nb_lignes_resultat`

  Modifie l'estimation du nombre de lignes renvoyées par une fonction SRF. Voir CREATE FUNCTION pour plus d'informations.

`SUPPORT` `support_function`

  Fournit une fonction de support de planification utilisable pour cette fonction. Voir Section 38.11 pour plus d'informations. Il faut être super-utilisateur pour utiliser cette option.

  Cette option ne peut pas être utilisée pour supprimer la fonction de support, parce qu'elle doit indiquer une nouvelle fonction de support. Si vous avez besoin de faire cela, utilisez `CREATE OR REPLACE FUNCTION`.

`parametre`
`valeur`

  Ajoute ou modifie l'initialisation d'un paramètre de configuration lorsque la fonction est appelée. Si `valeur` est `DEFAULT` ou, de façon équivalente, si `RESET` est utilisé, le paramètre local de la fonction est supprimée pour que la fonction s'exécute avec la valeur par défaut du paramètre. Utiliser `RESET ALL` supprime tous les valeurs spécifiques des paramètres pour cette fonction. `SET FROM CURRENT` sauvegarde la valeur actuelle du paramètre quand `ALTER FUNCTION` est exécuté comme valeur à appliquer lors de l'exécution de la fonction.

  Voir SET et Chapitre 20 pour plus d'informations sur les noms des paramètres et les valeurs autorisés.

`RESTRICT`

  Ignoré, présent pour des raisons de conformité avec le standard SQL.

## Exemples

Renommer la fonction `sqrt` pour le type `integer` en `square_root` :

    ALTER FUNCTION sqrt(integer) RENAME TO square_root;

Changer le propriétaire de la fonction `sqrt` pour le type `integer` en `joe` :

    ALTER FUNCTION sqrt(integer) OWNER TO joe;

Modifier le schéma de la fonction `sqrt` du type `integer` par `maths` :

    ALTER FUNCTION sqrt(integer) SET SCHEMA maths;

Pour marquer la fonction `sqrt` du type `integer` comme dépendant de l'extension `mathlib` :

    ALTER FUNCTION sqrt(integer) DEPENDS ON EXTENSION mathlib;

Pour ajuster automatiquement le chemin de recherche des schémas pour une fonction :

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

Pour désactiver le paramètre `search_path` d'une fonction :

    ALTER FUNCTION verifie_motdepasse(text) RESET search_path;

La fonction s'exécutera maintenant avec la valeur de la session pour cette variable.

## Compatibilité

La compatibilité de cette instruction avec l'instruction `ALTER FUNCTION` du standard SQL est partielle. Le standard autorise la modification d'un plus grand nombre de propriétés d'une fonction mais ne laisse pas la possibilité de renommer une fonction, de placer le commutateur `SECURITY DEFINER` sur la fonction, d'y attacher des valeurs de paramètres ou d'en modifier le propriétaire, le schéma ou la volatilité. Le standard requiert le mot clé `RESTRICT` ; il est optionnel avec PostgreSQL.

## Voir aussi

CREATE FUNCTION, DROP FUNCTION