PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Fehler beheben:wörtlicher Zeilenumbruch in Daten in Postgres gefunden?

Gemäß Code-Snippet aus der PostgreSQL-Quelle, 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;
}

es bedeutet, dass Ihre Eingabedaten das Byte 0x0A verwenden irgendwo in deinen Saiten, z. Sie verwenden "abcNxyz" , wobei anstelle von N tatsächlich gibt es ein Byte mit dem Wert 0x0A .

Die Lösung besteht darin, die Zeichenfolge "abc\n" zu verwenden stattdessen. Sie sollten in der Lage sein, alle falschen Zeilenumbrüche zu finden und sie durch \n zu ersetzen mit einem Skript, vielleicht Python oder Perl.