Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
doc: \copy can get data values \. and end-of-input confused
authorBruce Momjian <bruce@momjian.us>
Fri, 3 Nov 2023 17:57:58 +0000 (13:57 -0400)
committerBruce Momjian <bruce@momjian.us>
Fri, 3 Nov 2023 17:57:58 +0000 (13:57 -0400)
Reported-by: Svante Richter
Discussion: https://postgr.es/m/fcd57e4-8f23-4c3e-a5db-2571d09208e2@beta.fastmail.com

Backpatch-through: 11

doc/src/sgml/ref/psql-ref.sgml
src/bin/psql/copy.c

index 86c8b84223b0d10a1d4a0894d6365245322a6f4d..a5e2d1f041858d34e09555250a5ae25479bc1ab9 100644 (file)
@@ -1076,6 +1076,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>
 
index f9e53d6295402c9b2e2f81ffa494a19d9916001c..182830f0ccb4fad2934906c0501893922dfd84de 100644 (file)
@@ -631,6 +631,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.
                     * http://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)