> > Why can't we keep all locks until main tx end ?
>
> For committed subtransactions we have to do that, yes, but for aborted
> subtransactions we must release. Otherwise you can't implement a retry
> loop around a potentially-deadlocking operation.
Ok, that would certainly be good to have, but it is imho not a "must have".
> > (I am assuming that a deadlock will still break the whole tx)
>
> Wrong. We might as well not bother with the entire project.
There are plenty of examples that do not involve deadlocks.
The most prominent was plobably "insert -> duplicate key -> update instead"
Also the new NOLOCK statements come to mind, ...
Andreas