Vous n'êtes pas identifié(e).
Pages : 1
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
Une procédure stockée est une transaction en elle-même. Donc pas de limitation.
Guillaume.
Hors ligne
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
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
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
Ok merci
Hors ligne
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
Effectivement, vu le déroulement des opérations, c'est parfaitement logique que le savepoint soit global et propagé.
Hors ligne
Pages : 1