And consider this case:
BEGIN; ... SAVEPOINT x; SELECT func_call(); SELECT func_call(); COMMIT;
Now if func_call has a savepoint, it is really nested because it can't
know whether the savepoint X will be used to roll back, so its status is
dependent on the status of X. Now, if we used savepoints in func_call,
what happens in the second function call when we define a savepoint with
the same name? I assume we overwrite the original, but using nested
transaction syntax seems much clearer.
It also seems in this example that func_call() probably shouldn't have permission to rollback to savepoint x? Otherwise it would get...weird.
Chris
---------------------------(end of broadcast)--------------------------- TIP 8: explain analyze is your friend