sql >> Databasteknik >  >> RDS >> PostgreSQL

Lösning av fel:bokstavlig nyrad hittades i data i Postgres?

Enligt kodavsnitt från PostgreSQL-källan, 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;
}

det betyder att din indata använder byte 0x0A någonstans inuti dina strängar, t.ex. du använder "abcNxyz" , där istället för N faktiskt det finns byte med värdet 0x0A .

Lösningen är att använda strängen "abc\n" istället. Du bör kunna hitta alla falska nyrader och ersätta dem till \n använder något skript, kanske Python eller Perl.



  1. Möjligt att göra en MySQL främmande nyckel till en av två möjliga tabeller?

  2. PostgreSQL - Tilldela heltalsvärde till sträng i case-satsen

  3. MySQL exempeldatabas

  4. Lägga till en nyckel till en tom hstore-kolumn