Theo đoạn mã từ nguồn PostgreSQL, copy.c
:
/* Process \n */
if (c == '\n' && (!cstate->csv_mode || !in_quote))
{
if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
ereport(ERROR,
(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
!cstate->csv_mode ?
errmsg("literal newline found in data") :
errmsg("unquoted newline found in data"),
!cstate->csv_mode ?
errhint("Use \"\\n\" to represent newline.") :
errhint("Use quoted CSV field to represent newline.")));
cstate->eol_type = EOL_NL; /* in case not set yet */
/* If reach here, we have found the line terminator */
break;
}
có nghĩa là dữ liệu đầu vào của bạn đang sử dụng byte 0x0A
ở đâu đó bên trong chuỗi của bạn, ví dụ:bạn sử dụng "abcNxyz"
, thay vì N
thực sự có byte với giá trị 0x0A
.
Giải pháp là sử dụng chuỗi "abc\n"
Thay vào đó, bạn sẽ có thể tìm thấy tất cả các dòng mới giả mạo và thay thế chúng thành \n
bằng cách sử dụng một số tập lệnh, có thể là Python hoặc Perl.