diff --git a/lib/modules/Sql.pmod/pgsql.pike b/lib/modules/Sql.pmod/pgsql.pike
index b790cd3cf64204b86f7047d2504a76f05b1b1b3b..e7b501092b183a11b85275b3c952959974c39324 100644
--- a/lib/modules/Sql.pmod/pgsql.pike
+++ b/lib/modules/Sql.pmod/pgsql.pike
@@ -1034,7 +1034,7 @@ void destroy()
 { close();
 }
 
-private void reconnect(void|int force)
+private int reconnect(void|int force)
 { Thread.MutexKey connectmtxkey;
   if(_c)
   { reconnected++;
@@ -1075,12 +1075,19 @@ private void reconnect(void|int force)
   plugbuf[0]=_c.plugint32(len);
   _c.write(plugbuf);
   PD("%O\n",plugbuf);
-  _decodemsg(readyforquery);
+  { mixed err=catch(_decodemsg(readyforquery));
+    if(err)
+      if(force)
+	return 0;
+      else
+	throw(err);
+  }
   PD("%O\n",_runtimeparameter);
   if(force)
   { lastmessage+=({sprintf("Reconnected to database %s",host_info())});
     runcallback(backendpid,"_reconnect","");
   }
+  return 1;
 }
 
 //! @decl void reload()