PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 21/06/2010 16:49:41

beaud76
Membre

Gestion d'exception

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');
&#82

Hors ligne

#2 21/06/2010 17:04:35

Marc Cousin
Membre

Re : Gestion d'exception

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

Pied de page des forums