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
+      };
     }
   }