Supprimer les fonctions à l'intérieur d'un schéma

Trouvé sur un des forums, cette astuce qui mérite de figurer dans le cookbook.

Pour supprimer toutes les fonctions d'un schéma, on peut utiliser la commande suivante, en shell :

psql -U MON_USER MA_BASE -t -P format=unaligned -c "\df MON_SCHEMA.*"|awk -F '|' '{if (NF > 0 ) print "drop function "$2"("$4") cascade;";}' | psql -U MON_USER MA_BASE

Le cascade permet de gérer la présence d'une fonction d'agrégation.

Il est utile pour le bon fonctionnement de la commande de mettre le mot de passe de l'utilisateur dans la variable d'environnement PGPASSWORD.

Merci à jxemo pour cette astuce et à Sparky pour la piste.

–
SAS le 22/05/2007

Finalement, j'ai une autre façon de faire, que je préfère psql -U mon_user DATABASE -t -c “select 'drop function '||nspname||'.'||proname||';' from pg_proc join pg_namespace as m on (pronamespace=m.oid) where nspname = lower('MONSCHEMA')” > a.sql

psql -U mon_user DATABASE -e -f a.sql

–
Sparky le 20/04/2010