Commit df3a6fe4 authored by Tom Lane's avatar Tom Lane

Fix psql's \copy command to ensure that it cycles libpq back to the idle state

(in particular, causing the ReadyForQuery message to be eaten) before
returning from do_copy.  The only known consequence of failing to do so is
that get_prompt might show a wrong result for the %x transaction status
escape, as reported by Bernd Helmle; but it's possible there are other issues.

Back-patch as far as 7.4, the oldest version supporting %x.
parent 9b15b140
......@@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2006, PostgreSQL Global Development Group
*
* $PostgreSQL: pgsql/src/bin/psql/copy.c,v 1.70 2006/10/06 17:14:00 petere Exp $
* $PostgreSQL: pgsql/src/bin/psql/copy.c,v 1.71 2006/11/24 23:06:50 tgl Exp $
*/
#include "postgres_fe.h"
#include "copy.h"
......@@ -598,6 +598,18 @@ do_copy(const char *args)
PQclear(result);
/*
* Make sure we have pumped libpq dry of results; else it may still be
* in ASYNC_BUSY state, leading to false readings in, eg, get_prompt().
*/
while ((result = PQgetResult(pset.db)) != NULL)
{
success = false;
psql_error("\\copy: unexpected response (%d)\n",
PQresultStatus(result));
PQclear(result);
}
if (options->file != NULL)
{
if (fclose(copystream) != 0)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment