Maison > base de données > tutoriel mysql > Comment supprimer en toute sécurité toutes les fonctions surchargées par nom dans PostgreSQL ?

Comment supprimer en toute sécurité toutes les fonctions surchargées par nom dans PostgreSQL ?

Patricia Arquette
Libérer: 2024-12-29 04:20:10
original
969 Les gens l'ont consulté

How to Safely Drop All Overloaded Functions by Name in PostgreSQL?

Suppression de fonctions sans numéros/types de paramètres spécifiés

Lors de la gestion de fonctions stockées dans un fichier texte, l'ajout ou la modification de paramètres de fonction peut créer des surcharges. La suppression de la fonction d'origine nécessite de répertorier manuellement tous les types de paramètres, ce qui peut être fastidieux.

Requête de base

Pour résoudre ce problème, la requête suivante génère des instructions DDL pour supprimer toutes les fonctions portant un nom donné, quel que soit de paramètres :

SELECT 'DROP FUNCTION ' || oid::regprocedure
FROM   pg_proc
WHERE  proname = 'my_function_name'  -- function name without schema-qualification
AND    pg_function_is_visible(oid);  -- restrict to current search path
Copier après la connexion

Fonction

Pour une exécution immédiate des instructions générées, la fonction PL/pgSQL suivante peut être utilisé :

CREATE OR REPLACE FUNCTION f_delfunc(_name text, OUT functions_dropped int)
LANGUAGE plpgsql AS
$func$
-- drop all functions with given _name in the current search path, regardless of function parameters
DECLARE
   _sql text;
BEGIN
   SELECT count(*)::int
        , 'DROP FUNCTION ' || string_agg(oid::regprocedure::text, '; DROP FUNCTION ')
   FROM   pg_catalog.pg_proc
   WHERE  proname = _name
   AND    pg_function_is_visible(oid)  -- restrict to current search path
   INTO   functions_dropped, _sql;     -- count only returned if subsequent DROPs succeed

   IF functions_dropped > 0 THEN       -- only if function(s) found
     EXECUTE _sql;
   END IF;
END
$func$;
Copier après la connexion

Appelez la fonction comme suit pour supprimer toutes les fonctions correspondant au nom spécifié :

SELECT f_delfunc('my_function_name');
Copier après la connexion

La fonction renvoie le nombre de fonctions supprimées ou 0 si aucune n'a été trouvée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal