sql >> Databáze >  >> RDS >> PostgreSQL

Řešení chyby:v datech v Postgresu byl nalezen doslovný nový řádek?

Podle úryvku kódu ze zdroje 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;
}

to znamená, že vaše vstupní data používají bajt 0x0A někde uvnitř vašich strun, např. používáte "abcNxyz" , kde místo N ve skutečnosti existuje bajt s hodnotou 0x0A .

Řešením je použít řetězec "abc\n" místo toho. Měli byste být schopni najít všechny falešné nové řádky a nahradit je \n pomocí nějakého skriptu, třeba Pythonu nebo Perlu.



  1. Jak zapnout a vypnout IDENTITY_INSERT pomocí SQL Server 2008?

  2. Jaký je nejlepší způsob předání parametrů SQLCommand?

  3. SQL:seskupit podle z jiné tabulky a invertovat výsledek

  4. T-SQL úterý #106:MÍSTO spouštěčů