sql >> Database >  >> RDS >> PostgreSQL

Fout oplossen:letterlijke nieuwe regel gevonden in gegevens in Postgres?

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.



  1. CSV opslaan met UTF-16BE-codering in PHP

  2. Rails:rake db:create:all kan geen verbinding maken met de PostgreSQL-database

  3. Hoe controleer ik in PHP op records die ouder zijn dan vandaag?

  4. PostgreSQL - Gegevens verwijderen die ouder zijn dan een uur en vervolgens nieuwe gegevens invoegen in dezelfde tabel