diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2006-11-24 23:06:56 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2006-11-24 23:06:56 +0000 |
commit | 2f523a6f53e5929b8b72df620a16e3981488eac0 (patch) | |
tree | 938be63b9f1f8ce25fe85eca813a8548c6464856 /src | |
parent | 35f9bf3725c164fa302e748f6b063dafce3c4027 (diff) | |
download | postgresql-2f523a6f53e5929b8b72df620a16e3981488eac0.tar.gz postgresql-2f523a6f53e5929b8b72df620a16e3981488eac0.zip |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/bin/psql/copy.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/bin/psql/copy.c b/src/bin/psql/copy.c index bd1763c5ac4..15739318826 100644 --- a/src/bin/psql/copy.c +++ b/src/bin/psql/copy.c @@ -3,7 +3,7 @@ * * Copyright (c) 2000-2005, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/bin/psql/copy.c,v 1.58 2005/10/15 02:49:40 momjian Exp $ + * $PostgreSQL: pgsql/src/bin/psql/copy.c,v 1.58.2.1 2006/11/24 23:06:56 tgl Exp $ */ #include "postgres_fe.h" #include "copy.h" @@ -573,6 +573,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) |