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

Reply via email to