Florian Pflug wrote: > On May 25, 2010, at 12:18 , Heikki Linnakangas wrote: > >> On 25/05/10 13:03, Florian Pflug wrote: >> >>> On May 25, 2010, at 6:08 , Sam Vilain wrote: >>> >>>> http://www.postgresql.org/docs/8.4/static/sql-savepoint.html >>>> >>>> Lead us to believe that if you roll back to the same savepoint name >>>> twice in a row, that you might start walking back through the >>>> savepoints. I guess I missed the note on ROLLBACK TO SAVEPOINT that >>>> that is not how it works. >>>> >>>> Here is the section: >>>> >>>> SQL requires a savepoint to be destroyed automatically when another >>>> savepoint with the same name is established. In PostgreSQL, the old >>>> savepoint is kept, though only the more recent one will be used when >>>> rolling back or releasing. (Releasing the newer savepoint will cause the >>>> older one to again become accessible to ROLLBACK TO SAVEPOINT and >>>> RELEASE SAVEPOINT.) Otherwise, SAVEPOINT is fully SQL conforming. >>>> >>> I'm confused. The sentence in brackets "Releasing the newer savepoint will >>> cause the older one to again become accessible to ROLLBACK TO SAVEPOINT and >>> RELEASE SAVEPOINT" implies that you *will* walk backwards through all the >>> savepoints named "a" if you repeatedly issue "ROLLBACK TO SAVEPOINT a", no? >>> If that is not how it actually works, then this whole paragraph is wrong, >>> I'd say. >>> >> Releasing the newer savepoint will cause the older one to again become >> accessible, as the doc says, but rolling back to a savepoint does not >> implicitly release it. You'll have to use RELEASE SAVEPOINT for that. >> > > Ah, now I get it. Thanks. > > Would changing "Releasing the newer savepoint will cause ... " to "Explicitly > releasing the newer savepoint" or maybe even "Explicitly releasing the newer > savepoint with RELEASE SAVEPOINT will cause ..." make things clearer? >
Yes, probably - your misreading matches my misreading of it :-) There is another way you can get there - releasing to a savepoint before the re-used savepoint name will also release the savepoints after it. ie savepoint foo; savepoint bar; savepoint foo; release to savepoint bar; release to savepoint foo; After the first release, the second 'foo' savepoint is gone. I think this is a key advantage in saving the old savepoints. Cheers, Sam -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers