Re: Two features left - Mailing list pgsql-general
From | Jean-Luc Lachance |
---|---|
Subject | Re: Two features left |
Date | |
Msg-id | 3DE54D91.23B9F79D@nsd.ca Whole thread Raw |
In response to | Re: Two features left (Bruce Momjian <pgman@candle.pha.pa.us>) |
Responses |
Re: Two features left
|
List | pgsql-general |
Jon, What I would like to be able to do is within a loop for example, commit each iteration. Jon Swinth wrote: > > Hmm... I'm not quite sure what you mean by function start point. It has been > a while since I did any embeded DB code. Everything now is through a JDBC > interface using standard SQL calls. > > It sounds like you are wanting to be able to place a BEGIN statement within a > function call to make sure the calls within the function are in a transaction > and to be able to abort to that point. The issue I see with doing your > nested transactions vs. savepoint is that you would have to invent a way to > mark the end of the sub-transaction without a commit/rollback. Here is an > example: > > BEGIN; > UPDATE... > function_a(){ > BEGIN > UPDATE > function_b() { > BEGIN > UPDATE > } //end function_b > UPDATE > ABORT > } //end function_a > UPDATE > COMMIT; > > How does the system know that the ABORT in the second half of function_a > should rollback to the BEGIN in function_a rather than the BEGIN in > function_b? The other issue I have seen is where you want to overwrite a > point, which you can usually do with a SAVEPOINT structure. This is > especially usefull in a looping structure where you want to be albe to roll > out one loop. > > BEGIN; > UPDATE... > function_a(){ > UPDATE > SAVEPOINT a ; > LOOP > function_b() { > SAVEPOINT b; > UPDATE > UPDATE > UPDATE > IF error ROLLBACK TO b ; > } //end function_b > UPDATE > SAVEPOINT a ; > END LOOP; > } //end function_a > UPDATE > COMMIT; > > In this case the function_b may be something that tries to place something > somewhere and has multiple updates. If one of the updates fails then you > want to be able to rollback to the beginning loop value and let the next > iteration of the loop try out the next location. This type of structure is > especially usefull when there are many simultanious threads going on doing a > simular operation. > > On Wednesday 27 November 2002 01:45 pm, Jean-Luc Lachance wrote: > > Jon, > > > > That is all fine and dandy, but aren't function start point candidate > > for a rollback to point? > > A transaction is currently implicitely started on function call, and we > > get into the same problem as with nested transaction when a function > > calls another one. > > > > Don't get me wrong, I thing SAVEPOINT and ROLLBACK TO is a great idea, > > but nested transaction is needed. > > > > JLL > > ---------------------------(end of broadcast)--------------------------- > TIP 3: if posting/reading through Usenet, please send an appropriate > subscribe-nomail command to majordomo@postgresql.org so that your > message can get through to the mailing list cleanly
pgsql-general by date: