Maison > base de données > tutoriel mysql > Comment supprimer en toute sécurité les fonctions PostgreSQL sans connaître leurs paramètres ?

Comment supprimer en toute sécurité les fonctions PostgreSQL sans connaître leurs paramètres ?

DDD
Libérer: 2024-12-26 15:40:20
original
990 Les gens l'ont consulté

How to Safely Drop PostgreSQL Functions Without Knowing Their Parameters?

Suppression de fonctions sans connaissance des paramètres

Dans Postgres, la gestion des fonctions stockées dans un fichier texte peut être difficile lors de l'ajout ou de la suppression de paramètres à des fonctions existantes. Pour résoudre ce problème, il existe une méthode générique pour supprimer toutes les fonctions portant un nom spécifique, quel que soit le nombre ou le type de paramètres.

Requête de base

Exécutez la requête suivante pour générer des instructions DDL pour supprimer toutes les fonctions avec un nom spécifique :

SELECT 'DROP FUNCTION ' || oid::regprocedure
FROM pg_proc
WHERE proname = 'my_function_name'
AND pg_function_is_visible(oid);
Copier après la connexion

Remplacez 'my_function_name' par le nom réel de votre fonction (sensible à la casse et sans guillemets doubles). Cette requête renvoie une liste d'instructions DROP FUNCTION avec les types de paramètres corrects pour toutes les surcharges de la fonction.

Approche fonctionnelle

Pour une exécution immédiate des instructions drop, pensez à créer 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

Pour supprimer toutes les fonctions nommées 'my_function_name' :

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

La fonction renverra le nombre de fonctions supprimées.

Considérations

  • Cette méthode supprime toutes les fonctions portant le nom spécifié, quel que soit leur propriétaire ou leur schéma.
  • Soyez prudent lorsque en utilisant cette méthode car elle peut entraîner des suppressions involontaires de fonctions.
  • Pour les versions antérieures à Postgres 9.1, de légères modifications sont nécessaires. Consultez l'historique des modifications de la réponse pour plus de détails.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal