From: | Robert Zenz <robert(dot)zenz(at)sibvisions(dot)com> |
---|---|
To: | "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: Information on savepoint requirement within transctions |
Date: | 2018-01-29 08:37:22 |
Message-ID: | 5A6EDD41.70005@sibvisions.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On 26.01.2018 17:11, David G. Johnston wrote:
> The convention for these lists is to inline or bottom-post. Top-posting
> is discouraged.
Okay, I'll keep it in mind.
> Here's my take, the docs support this but maybe take some interpretation...
>
> A SAVEPOINT begins what is effectively a sub-transaction without ending
> the main transaction. If that sub-transaction fails you can throw it away
> (ROLLBACK TO) and pretend that it didn't happen: you are dropped back to
> the point where the savepoint was issued and the main transaction
> re-engaged.
>
> Its kinda like a try/catch block:
>
> BEGIN:
>
> do_stuff
>
> SAVEPOINT try { lets_fail; this_works; } catch { ROLLBACK TO }
>
> do_more_stuff
>
> COMMIT;
>
> As long as both do_stuff and do_more_stuff succeed when you commit the
> things that they did will persist.
>
> The stuff in lets_fail AND this_works, however, will be discarded because
> of the lets_fail failing and this_works belonging to the same
> sub-transaction.
>
> If do_more_stuff depends on lets_fail or this_works succeeding then
> do_more_stuff will fail and will cause do_stuff to rollback as well.
Thanks for the detailed explanation, that helps a lot. However, I'm still
looking for "official" documentation on their *requirement* in combination with
failing statements. Documentation, bug report, mailing list discussions,
something like that. In particular I'm interested in the questions:
* Why are they required in combination with failing statements (when every
other database does an "automatic savepoint and rollback" for a failed statement)?
* When was that behavior chosen? Was it always like that? Was it adopted later?
* What is the design decision behind it?
There is a lot of information on what savepoints are and how they work (and also
thanks to you I'm now fairly certain I have good grasp on them), but I fail to
locate documentation on these questions.
From | Date | Subject | |
---|---|---|---|
Next Message | Adam Tauno Williams | 2018-01-29 11:37:37 | Re: Information on savepoint requirement within transctions |
Previous Message | Andreas Kretschmer | 2018-01-29 08:19:00 | Re: FW: Setting up streaming replication problems |