Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Je développe actuellement un logiciel à base de fonctions plpgsql qui sont appelées dans des scripts psql et par du code php.
Elles doivent pouvoir être exécutées avec des versions de postgresql 8.2 et suivantes.
Certaines fonctions en appellent d'autres. Actuellement, lorsqu'une fonction quelconque détecte une anomalie, elle fait un simple RAISE EXCEPTION avec un message explicatif de l'erreur.
Pour diverses raisons, j'aimerais centraliser la gestion des erreurs dans une fonction dédiée.
En fait je souhaiterais qu'en cas d'erreur :
- les éventuelles opérations déjà effectuées sur la base soient rollbackées,
- une ligne soit insérée dans une table de log des erreurs,
- un message d'erreur soit retourné à l'application.
Mais j'avoue avoir du mal à structurer du code pour mettre en oeuvre ces principes.
Dit autrement, j'ai actuellement du code du style :
Create function FctA
begin
...
if <condition> then
raise exception 'erreur dans FctA';
…
end;
Et j'aimerais un fonctionnement du genre :
Create function FctA
begin
...
if <condition> then
perform FctErr ('erreur dans FctA');
R
Hors ligne
Tout code PL doit s'exécuter dans une seule transaction sous PostgreSQL. Il n'y a pas à l'heure actuelle d'autonomous transaction. Vous ne pourrez donc que très difficilement (avec du dblink ou autre verrue du même genre) faire une insertion durant le traitement une erreur. Vous pouvez tout à fait, de mémoire, appeler une fonction dans un bloc d'exception par contre.
Une erreur déclenche le rollback automatique du block BEGIN dans lequel elle se produit.
Marc.
Hors ligne
Pages : 1