diff --git a/src/tools/pgproto/main.c b/src/tools/pgproto/main.c
index 9c9950c45..f24975432 100644
--- a/src/tools/pgproto/main.c
+++ b/src/tools/pgproto/main.c
@@ -369,6 +369,7 @@ process_message_type(int kind, char *buf, PGconn *conn)
 	char	   *data;
 	char	   *bufp;
 	long		stime;
+	int			len;
 
 	switch (kind)
 	{
@@ -412,6 +413,20 @@ process_message_type(int kind, char *buf, PGconn *conn)
 			pg_free(query);
 			break;
 
+		case 'q':
+			/* Like 'Q' but accepts message packet length */
+			buf++;
+			len = buffer_read_int(buf, &bufp);
+			buf = bufp;
+			SKIP_TABS(buf);
+			query = buffer_read_string(buf, &bufp);
+			fprintf(stderr, "FE=> Query (query=\"%s\")\n", query);
+			send_char((char) 'Q', conn);
+			send_int(len, conn);
+			send_string(query, conn);
+			pg_free(query);
+			break;
+
 		case 'd':
 			buf++;
 			data = buffer_read_string(buf, &bufp);
