インポートする必要がある自分の管理下にない 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_MOUSSES
190'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 値の表現を変更できないようです。