mirror of
https://github.com/postgres/postgres.git
synced 2026-04-15 22:10:45 -04:00
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.
This commit is contained in:
parent
8637cd1ee8
commit
e53a43bf17
1 changed files with 13 additions and 1 deletions
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* Copyright (c) 2000-2003, PostgreSQL Global Development Group
|
||||
*
|
||||
* $Header: /cvsroot/pgsql/src/bin/psql/copy.c,v 1.33.4.1 2004/08/14 22:24:49 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/bin/psql/copy.c,v 1.33.4.2 2006/11/24 23:07:07 tgl Exp $
|
||||
*/
|
||||
#include "postgres_fe.h"
|
||||
#include "copy.h"
|
||||
|
|
@ -416,6 +416,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 (copystream != stdout && copystream != stdin)
|
||||
fclose(copystream);
|
||||
free_copy_options(options);
|
||||
|
|
|
|||
Loading…
Reference in a new issue