diff --git a/lib/modules/Sql.pmod/pgsql.pike b/lib/modules/Sql.pmod/pgsql.pike
index 79ebad3ef0906e6623f29245147ef7e748bfbf69..4f983a18af483e6e49e8a4c2ad7dea02e4d7261a 100644
--- a/lib/modules/Sql.pmod/pgsql.pike
+++ b/lib/modules/Sql.pmod/pgsql.pike
@@ -502,14 +502,7 @@ protected void destroy() {
 }
 
 private .pgsql_util.Result textquery(string q) {
-  .pgsql_util.Result res;
-#if 1
-  foreach (q / ";"; ; string sq)
-    res = big_query(sq);
-#else				// textqueries and portals do not mix well
-  res = big_query(q, (["_text":1]));
-#endif
-  return res;
+  return big_query(q, (["_text":1]));
 }
 
 private void resyncdone() {
@@ -518,11 +511,15 @@ private void resyncdone() {
 }
 
 private void reset_dbsession() {
-  proxy.statementsinflight->wait_till_drained();
-  error(1);
-  .pgsql_util.Result res
-   = textquery("ROLLBACK;RESET ALL;CLOSE ALL;DISCARD TEMP");
-  while (res->fetch_row());
+  mixed err = catch {
+    proxy.statementsinflight->wait_till_drained();
+    error(1);
+    .pgsql_util.Result res
+     = textquery("ROLLBACK;RESET ALL;CLOSE ALL;DISCARD TEMP");
+    while (res->fetch_row());
+  };
+  if (err && !proxy.delayederror)
+    proxy.delayederror = err;
   resyncdone();
 }
 
diff --git a/lib/modules/Sql.pmod/pgsql_util.pmod b/lib/modules/Sql.pmod/pgsql_util.pmod
index e2effa721d9580ef8cd3899a87f0d03cff7e8dc2..ba2901a18d1643e732df022776ad14efae580daf 100644
--- a/lib/modules/Sql.pmod/pgsql_util.pmod
+++ b/lib/modules/Sql.pmod/pgsql_util.pmod
@@ -861,7 +861,7 @@ class sql_result {
     if (c = _c)
       cr = c->i;
     else
-      losterror();
+      losterror(LOSTERROR);
     _query = query;
     datarows = Thread.Queue();
     _ddescribe = Thread.Condition();
@@ -986,11 +986,11 @@ class sql_result {
     return index;
   }
 
-  private void losterror() {
-    string err;
+  private void losterror(void|string err) {
     if (pgsqlsess)
-      err = pgsqlsess->geterror(1);
-    error("%s\n", err || LOSTERROR);
+      err = pgsqlsess->geterror(1) || err;
+    if (err)
+      error("%s\n", err);
   }
 
   private void trydelayederror() {
@@ -2353,11 +2353,9 @@ class proxy {
             msglen -= 4;
             PD("NoData %O\n", portal._query);
 #endif
-            if (!portal._forcetext) {
-              portal._fetchlimit = 0;		// disables subsequent Executes
-              portal->_processrowdesc(({}), ({}));
-              portal = 0;
-            }
+            portal._fetchlimit = 0;		// disables subsequent Executes
+            portal->_processrowdesc(({}), ({}));
+            portal = 0;
             break;
           }
           case 'H':