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.
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
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$;
Appelez la fonction comme suit pour supprimer toutes les fonctions correspondant au nom spécifié :
SELECT f_delfunc('my_function_name');
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!