aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2023-11-03 13:57:58 -0400
committerBruce Momjian <bruce@momjian.us>2023-11-03 13:57:58 -0400
commit7186596db64a038150f03a02f3fcf9edb9f149c5 (patch)
treebe576115dd3549ae7cf1e2e500aea73716a52285
parentbf7584e4c7f759e7584b82f9353f61ba4a9d3f21 (diff)
downloadpostgresql-7186596db64a038150f03a02f3fcf9edb9f149c5.tar.gz
postgresql-7186596db64a038150f03a02f3fcf9edb9f149c5.zip
doc: \copy can get data values \. and end-of-input confused
Reported-by: Svante Richter Discussion: https://postgr.es/m/fcd57e4-8f23-4c3e-a5db-2571d09208e2@beta.fastmail.com Backpatch-through: 11
-rw-r--r--doc/src/sgml/ref/psql-ref.sgml4
-rw-r--r--src/bin/psql/copy.c1
2 files changed, 5 insertions, 0 deletions
diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index 1802330b703..2673684ace3 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -1075,6 +1075,10 @@ testdb=&gt;
destination, because all data must pass through the client/server
connection. For large amounts of data the <acronym>SQL</acronym>
command might be preferable.
+ Also, because of this pass-through method, <literal>\copy
+ ... from</literal> in <acronym>CSV</acronym> mode will erroneously
+ treat a <literal>\.</literal> data value alone on a line as an
+ end-of-input marker.
</para>
</tip>
diff --git a/src/bin/psql/copy.c b/src/bin/psql/copy.c
index f59db8d7bd0..92934725383 100644
--- a/src/bin/psql/copy.c
+++ b/src/bin/psql/copy.c
@@ -629,6 +629,7 @@ handleCopyIn(PGconn *conn, FILE *copystream, bool isbinary, PGresult **res)
* This code erroneously assumes '\.' on a line alone
* inside a quoted CSV string terminates the \copy.
* https://www.postgresql.org/message-id/E1TdNVQ-0001ju-GO@wrigleys.postgresql.org
+ * https://www.postgresql.org/message-id/bfcd57e4-8f23-4c3e-a5db-2571d09208e2@beta.fastmail.com
*/
if (strcmp(buf, "\\.\n") == 0 ||
strcmp(buf, "\\.\r\n") == 0)