Maison >base de données >tutoriel mysql >Puis-je supprimer toutes les fonctions correspondant à un nom générique dans PostgreSQL, quels que soient leurs paramètres ?

Puis-je supprimer toutes les fonctions correspondant à un nom générique dans PostgreSQL, quels que soient leurs paramètres ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-25 19:42:101013parcourir

Can I Drop All Functions Matching a Wildcard Name in PostgreSQL, Regardless of Their Parameters?

Puis-je supprimer des fonctions avec un caractère générique, quels que soient les paramètres ?

Introduction

Maintenance les fonctions stockées dans un fichier texte peuvent devenir fastidieuses, notamment lors de l'ajout ou de la suppression de paramètres. Taper manuellement l’ordre exact des paramètres pour chaque fonction peut être fastidieux. Cet article explore une solution pour supprimer toutes les fonctions portant un nom donné à l'aide d'un caractère générique, éliminant ainsi le besoin de spécifier des paramètres.

Requête de suppression de fonctions

Pour créer les éléments nécessaires Instructions DDL, exécutez la requête suivante :

SELECT 'DROP FUNCTION ' || oid::regprocedure
FROM pg_proc
WHERE proname = 'my_function_name'  -- Replace 'my_function_name' with the target function name
AND pg_function_is_visible(oid);  -- Restrict to the current search path

La requête produit des instructions DROP FUNCTION avec des types d'arguments, entre guillemets doubles et qualifié par le schéma. Cela garantit l'absence de vulnérabilité d'injection SQL et correspond au chemin de recherche actuel.

Fonction d'exécution des instructions Drop

Pour une exécution immédiate des instructions DROP, créez une fonction PL/pgSQL :

CREATE OR REPLACE FUNCTION f_delfunc(_name text, OUT functions_dropped int)
LANGUAGE plpgsql AS
$func$
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)
  INTO functions_dropped, _sql;
  IF functions_dropped > 0 THEN
    EXECUTE _sql;
  END IF;
END
$func$;

Appelez la fonction avec le nom de fonction souhaité pour supprimer les fonctions correspondantes et renvoyer le numéro droppé :

SELECT f_delfunc('my_function_name');

Considérations supplémentaires

  • Cette méthode supprime toutes les fonctions portant le nom donné, quels que soient les paramètres ou le schéma.
  • Soyez prudent lors de l'exécution de cette requête, car elle peut supprimer définitivement des fonctions.
  • Pour les versions de Postgres antérieures à 9.1, utilisez regproc et pg_get_function_identity_arguments(oid) au lieu de regprocedure et de la fonction string_agg.

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!

Déclaration:
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