PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Erreur de résolution :nouvelle ligne littérale trouvée dans les données dans Postgres ?

Selon l'extrait de code de la source 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;
}

cela signifie que vos données d'entrée utilisent l'octet 0x0A quelque part à l'intérieur de vos chaînes, par ex. vous utilisez "abcNxyz" , où au lieu de N en fait il y a un octet avec la valeur 0x0A .

La solution consiste à utiliser la chaîne "abc\n" à la place. Vous devriez être en mesure de trouver toutes les fausses nouvelles lignes et de les remplacer par \n en utilisant un script, peut-être Python ou Perl.