Do Postgres exceptions rise up the stack?
A basic question about raising exceptions in Postgres:
If Function A calls Function B
and Func B raises an exception, will the exception roll back the
transaction in Func A by default? Or do I need to trap and re-raise
the exception in Func A?
Thanks.
On Saturday 30 June 2007 23:14, Postgres User wrote:
A basic question about raising exceptions in Postgres:
If Function A calls Function B
and Func B raises an exception, will the exception roll back the
transaction in Func A by default? Or do I need to trap and re-raise
the exception in Func A?Thanks.
Any exception aborts the transaction. That's how exceptions work. If you don't
catch them, they bubble all the way to the surface. Otherwise it would be too
much like if-statement error checking.
How about this scenario:
func A()
begin
x = func B();
y = func C();
z = func D();
end
Where func A, B, C, and D all update the db. If a funciton is raised
in func D(), will all the transactions in the other children be rolled
back?
Or do I need to add code to enable this?
Show quoted text
On 6/30/07, Wiebe Cazemier <halfgaar@gmx.net> wrote:
On Saturday 30 June 2007 23:14, Postgres User wrote:
A basic question about raising exceptions in Postgres:
If Function A calls Function B
and Func B raises an exception, will the exception roll back the
transaction in Func A by default? Or do I need to trap and re-raise
the exception in Func A?Thanks.
Any exception aborts the transaction. That's how exceptions work. If you don't
catch them, they bubble all the way to the surface. Otherwise it would be too
much like if-statement error checking.---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend
Where func A, B, C, and D all update the db. If an EXCEPTION is raised
in func D(), will all the transactions in the other children be rolled
back?
Or do I need to add code to enable this?
Show quoted text
On 6/30/07, Postgres User <postgres.developer@gmail.com> wrote:
How about this scenario:
func A()
begin
x = func B();
y = func C();z = func D();
end
Where func A, B, C, and D all update the db. If a funciton is raised
in func D(), will all the transactions in the other children be rolled
back?
Or do I need to add code to enable this?On 6/30/07, Wiebe Cazemier <halfgaar@gmx.net> wrote:
On Saturday 30 June 2007 23:14, Postgres User wrote:
A basic question about raising exceptions in Postgres:
If Function A calls Function B
and Func B raises an exception, will the exception roll back the
transaction in Func A by default? Or do I need to trap and re-raise
the exception in Func A?Thanks.
Any exception aborts the transaction. That's how exceptions work. If you don't
catch them, they bubble all the way to the surface. Otherwise it would be too
much like if-statement error checking.---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend
On Saturday 30 June 2007 23:52, Postgres User wrote:
How about this scenario:
func A()
begin
x = func B();
y = func C();z = func D();
end
Where func A, B, C, and D all update the db. If a funciton is raised
in func D(), will all the transactions in the other children be rolled
back?
Or do I need to add code to enable this?
(Noted correction in other reply).
It will be rolled back. When you don't begin a transaction explicitly,
postgresql creates one implicitely when you execute a function. So, calling a
function will always be atomic.