Index: src/bin/psql/copy.c =================================================================== RCS file: /projects/cvsroot/pgsql/src/bin/psql/copy.c,v retrieving revision 1.60 diff -u -r1.60 copy.c --- src/bin/psql/copy.c 5 Mar 2006 15:58:51 -0000 1.60 +++ src/bin/psql/copy.c 25 May 2006 15:17:58 -0000 @@ -284,9 +284,10 @@ fetch_next = true; - /* someday allow BINARY here */ if (pg_strcasecmp(token, "oids") == 0) result->oids = true; + else if (pg_strcasecmp(token, "binary") == 0) + result->binary = true; else if (pg_strcasecmp(token, "csv") == 0) result->csv_mode = true; else if (pg_strcasecmp(token, "header") == 0) @@ -442,8 +443,6 @@ initPQExpBuffer(&query); printfPQExpBuffer(&query, "COPY "); - if (options->binary) - appendPQExpBuffer(&query, "BINARY "); appendPQExpBuffer(&query, "%s ", options->table); @@ -480,6 +479,9 @@ appendPQExpBuffer(&query, " WITH NULL AS '%s'", options->null); } + if (options->binary) + appendPQExpBuffer(&query, " BINARY"); + if (options->csv_mode) appendPQExpBuffer(&query, " CSV"); @@ -622,7 +624,7 @@ if (buf) { - fputs(buf, copystream); + fwrite(buf, 1, ret, copystream); PQfreemem(buf); } } @@ -686,6 +688,21 @@ else prompt = NULL; + if (!prompt) + { + int buflen; + + while ((buflen = fread(buf, 1, COPYBUFSIZ, copystream)) > 0) + { + if (PQputCopyData(conn, buf, buflen) <= 0) + { + OK = false; + copydone = true; + break; + } + } + } + else while (!copydone) { /* for each input line ... */ if (prompt)