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

#1 11/08/2009 16:43:34

Jiff
Membre

transactons dans une procédure stockée

Salut forumateurs,

J'ai beau creuser la doc de PG 8.4, je ne retrouve pas la page expliquant qu'on ne peut pas intégrer une transaction dans une procédure stockée.

Ai-je loupé la page en question, ou bien cette limitation a-t'elle été levée?

Hors ligne

#2 11/08/2009 16:55:30

gleu
Administrateur

Re : transactons dans une procédure stockée

Une procédure stockée est une transaction en elle-même. Donc pas de limitation.


Guillaume.

Hors ligne

#3 11/08/2009 16:55:53

Marc Cousin
Membre

Re : transactons dans une procédure stockée

Il n'y a pas d'autonomous transactions dans postgresql, si c'est bien la question. Par ailleurs chaque bloc begin/end est une sous transaction de la transaction en cours.

Dans les cas désespérés ça peut être fait avec une procédure par exemple en PLPerl qui ouvre une deuxième session. Mais ça me semble être à éviter dans la mesure du possible.


Marc.

Hors ligne

#4 11/08/2009 17:09:38

Jiff
Membre

Re : transactons dans une procédure stockée

Si je vous comprends bien tous les 2, l'appel d'une procédure stockée déclenche donc automatiquement une transaction, ce qui fait qu'il ne faut surtout pas en lancer une avant d'appeler la proc.

Je suppose logiquement qu'en cas de pépin, le rollback sera automatique (voire partiel si je passe par des savepoints), et que la seule trace apparente qu'il laissera au client sera le retour d'un message d'erreur indiquant la nature du pépin et le rollback?

Hors ligne

#5 11/08/2009 17:17:41

gleu
Administrateur

Re : transactons dans une procédure stockée

Pas de savepoint dans une procédure stockée, par contre, oui, le rollback est automatique en cas de pépin. Le seul moyen de récupérer, vu qu'il n'y a pas de savepoint, c'est de récupérer l'exception levée.


Guillaume.

Hors ligne

#6 11/08/2009 17:18:32

Jiff
Membre

Re : transactons dans une procédure stockée

Ok merci

Hors ligne

#7 11/08/2009 18:11:04

Marc Cousin
Membre

Re : transactons dans une procédure stockée

En fait, les savepoints sont faits automatiquement au début des blocs begin. Et le bloc est annulé par rollback to savepoint dans notre dos en cas d'exception interceptée, ou au savepoint du bloc appelant si on laisse se propager l'exception, etc…

Dernière modification par Marc Cousin (11/08/2009 18:11:21)


Marc.

Hors ligne

#8 11/08/2009 20:36:02

Jiff
Membre

Re : transactons dans une procédure stockée

Effectivement, vu le déroulement des opérations, c'est parfaitement logique que le savepoint soit global et propagé.

Hors ligne

Pied de page des forums