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
Libérer: 2024-12-25 19:42:10
original
1013 Les gens l'ont consulté

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
Copier après la connexion

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$;
Copier après la connexion

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');
Copier après la connexion

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!

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