Volgens het codefragment van de PostgreSQL-bron, 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;
}
het betekent dat uw invoergegevens byte 0x0A
. gebruiken ergens in je strings, b.v. je gebruikt "abcNxyz"
, waar in plaats van N
eigenlijk is er byte met waarde 0x0A
.
Oplossing is om string "abc\n"
. te gebruiken in plaats daarvan. Je zou in staat moeten zijn om alle valse nieuwe regels te vinden en ze te vervangen door \n
een of ander script gebruiken, misschien Python of Perl.