PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Błąd rozwiązywania:znaleziono dosłowny znak nowej linii w danych w Postgresie?

Według fragmentu kodu ze źródła 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;
}

oznacza to, że twoje dane wejściowe używają bajtu 0x0A gdzieś w twoich strunach, np. używasz "abcNxyz" , gdzie zamiast N w rzeczywistości istnieje bajt o wartości 0x0A .

Rozwiązaniem jest użycie ciągu "abc\n" zamiast tego. Powinieneś być w stanie znaleźć wszystkie fałszywe znaki nowej linii i zamienić je na \n za pomocą jakiegoś skryptu, być może Pythona lub Perla.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pakiety PGLogical 1.1 dla PostgreSQL 9.6beta1

  2. pgadmin4 :nie można skontaktować się z serwerem aplikacji postgresql.

  3. Filtrowanie Django JSONField

  4. Problem z kontenerami docker postgresql i pgadmin

  5. Różnica między tekstem a varchar (różne znaki)