diff --git a/lib/modules/Sql.pmod/pgsql.pike b/lib/modules/Sql.pmod/pgsql.pike
index 5562b34dabdeae75cecdbc20ae62ab93ccb80c29..b1b62567dc8d555c9712a581d48164962142be34 100644
--- a/lib/modules/Sql.pmod/pgsql.pike
+++ b/lib/modules/Sql.pmod/pgsql.pike
@@ -1030,6 +1030,8 @@ private void startquery(int forcetext, .pgsql_util.sql_result portal, string q,
 //!   (e.g. references to temporary tables created in the preceding
 //!   statement),
 //!   but it can speed up parsing due to increased parallelism.
+//!  @member int ":_debug"
+//!   Sets the debuglevel for query tracing.
 //! @endmapping
 //!
 //! @note
@@ -1077,6 +1079,7 @@ private void startquery(int forcetext, .pgsql_util.sql_result portal, string q,
   int forcecache = -1, forcetext = options.text_query;
   int syncparse = zero_type(options.sync_parse)
                    ? -1 : options.sync_parse;
+  int debuglevel;
   if (proxy.waitforauthready)
     waitauthready();
   string cenc = proxy.runtimeparameter[CLIENT_ENCODING];
@@ -1115,6 +1118,9 @@ private void startquery(int forcetext, .pgsql_util.sql_result portal, string q,
               case ":_sync":
                 syncparse = (int)value;
                 break;
+              case ":_debug":
+                debuglevel = (int)value;
+                break;
             }
             continue;
           }
@@ -1212,6 +1218,8 @@ private void startquery(int forcetext, .pgsql_util.sql_result portal, string q,
   .pgsql_util.sql_result portal;
   portal = .pgsql_util.sql_result(proxy, c, q, portalbuffersize, _alltyped,
    from, forcetext, timeout, syncparse, transtype);
+  if (debuglevel)
+    werror("{{\n%s\n}}\n%s\n", q, portal->_showbindings() * "\n");
   portal._tprepared = tp;
 #ifdef PG_STATS
   portalsopened++;