sql >> データベース >  >> RDS >> PostgreSQL

エラーの解決:Postgresのデータにリテラル改行が見つかりましたか?

    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;
    }
    

    これは、入力データがバイト0x0Aを使用していることを意味します 文字列内のどこか、たとえば"abcNxyz"を使用します 、Nの代わりに 実際には、値が0x0Aのバイトがあります 。

    解決策は、文字列"abc\n"を使用することです。 代わりに、偽の改行をすべて見つけて、\nに置き換えることができるはずです。 おそらくPythonやPerlなどのスクリプトを使用します。



    1. C#でバイトまたはショートの代わりにintを使用する必要があるのはなぜですか

    2. MySQLの月の最後の金曜日

    3. トリガーを無効にし、トリガーを再度有効にしますが、その間はテーブルの変更を避けてください

    4. ActiveRecordを使用してYiiのデータベースビューを呼び出す