0

インポートする必要がある自分の管理下にない 300,000 行のテーブルがあります。

以下を使用して、mysql からデータをエクスポートします。

mysqldump -u root --password=secret --fields-enclosed-by='\"' -T/tmp apflora_beob

次に、次の例を使用して各テーブルをインポートしようとします。

\copy beob_evab FROM '/Users/alex/tmp/beob_evab.txt' (FORMAT 'csv', DELIMITER E'\t', NULL '\N', ESCAPE E'\"', ENCODING 'UTF8');

これは、ほとんどのテーブルで機能し、450,000 行を含むテーブルでも機能します。しかし、私はこのエラーが発生します:

ERROR:  value too long for type character varying(10)
CONTEXT:  COPY beob_evab, line 190310, column COUV_MOUSSES: "2\%  \N  \N  \N  \N  \N  \N  \N  \N  \N  \N  30  \N  15  \N  \N  \N  \N  \N  \N  \N  \N  \N  \N  \N  \N  0.01  \N  \N
Bachs, Dau..."

COUV_MOUSSES190'310 行目のフィールドを確認すると、次の値が含まれています2"%

これを機能させるには、何を変更する必要がありますか?

"2""%"@klin に従って正しい出力を得るには(ありがとう!) --fields-escaped-by='"'、mysqldump コマンドに追加する必要があります。したがって、次のようになります。

mysqldump -u root --password=secret --fields-enclosed-by='"' --fields-escaped-by='"' -T/tmp apflora_beob

問題は次のとおりです。現在、Null 値は としてエクスポートされ"Nます。

問題ありません。コピー コマンドを次のように変更しました。

\copy beob_evab FROM '/Users/alex/tmp/beob_evab.txt' (FORMAT 'csv', DELIMITER E'\t', NULL '"N', ESCAPE "'", ENCODING 'UTF8');

これにより、Postgres で次のエラーが発生します。

ERROR:  CSV quote character must not appear in the NULL specification

また、MySQL では Null 値の表現を変更できないようです。

4

1 に答える 1

1

値は次のように書き留める必要があります。

"2""%"

RFC 4180 - カンマ区切り値 (CSV) ファイルの一般的な形式と MIME タイプ:

[5]。各フィールドは、二重引用符で囲まれている場合と囲まれていない場合があります (ただし、Microsoft Excel などの一部のプログラムでは、二重引用符がまったく使用されません)。フィールドが二重引用符で囲まれていない場合、フィールド内に二重引用符が表示されない場合があります。(...)

[7]。二重引用符を使用してフィールドを囲む場合、フィールド内にある二重引用符は、その前に別の二重引用符を付けてエスケープする必要があります。例えば:

   "aaa","b""bb","ccc"
于 2016-02-07T20:51:09.750 に答える