diff --git a/lib/modules/Sql.pmod/pgsql_util.pmod b/lib/modules/Sql.pmod/pgsql_util.pmod index 26fb366abe344c0daf5d3acf16dc865382ee7235..99fd4622fe499c04533cdb7f4d3addd92622b879 100644 --- a/lib/modules/Sql.pmod/pgsql_util.pmod +++ b/lib/modules/Sql.pmod/pgsql_util.pmod @@ -2714,12 +2714,14 @@ class proxy { * inside a destructor, throwing an error will not work anymore. * Warnings will be silently discarded at this point. */ - lastmessage = filter(lastmessage, lambda(string val) { - return has_prefix(val, "ERROR ") || has_prefix(val, "FATAL "); }); - if (err || (err = catch(errstring = geterror(1)))) - werror(describe_backtrace(err)); - else if (errstring && sizeof(errstring)) - werror("%s\n", errstring); // Add missing terminating newline + catch { // Use yet another catch for exceptions in backtraces + lastmessage = filter(lastmessage, lambda(string val) { + return has_prefix(val, "ERROR ") || has_prefix(val, "FATAL "); }); + if (err || (err = catch(errstring = geterror(1)))) + werror(describe_backtrace(err)); + else if (errstring && sizeof(errstring)) + werror("%s\n", errstring); // Add missing terminating newline + }; } }