summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2023-11-03 13:57:59 -0400
committerBruce Momjian <bruce@momjian.us>2023-11-03 13:57:59 -0400
commitd1d80ef0115d5c7a079136403528a485c3c48586 (patch)
tree1b315759e3d59cf7f00b16ec94472f62f59c5bac
parente29f8e7535f4bb68e30de8066e6aba460d0f072c (diff)
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 d14f0581e60..32eee145acd 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -1086,6 +1086,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 e1fee8e0992..5a9ec297c28 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)