集中するためにやっていること

テーブルのデータを移植したいと思っています
PostgreSQL8.4から出力したCSVをMySQL5.5で取り込みたいのですが、COPYコマンドを使用すると以下のようなエラーが出ます
ERROR 1262 (01000): Row 1 was truncated; it contained more data than there were input columns

PostgreSQLはtext[]型で"{A_1,A_2}"といったデータを出力します
MySQLはPostgreSQLの配列に相当する型がないようなのでBlob型で格納しようと思っています

おそらくデータ内のカンマが原因なのはわかっているのですが、上手くエクスポート・インポートする方法はありませんでしょうか?

A 回答 (1件)

DBMSのバージョン、エクスポート、インポートの実行コマンドを提示していないので推測になりますがMySQL側はLOAD DATA (LOCAL) INFILE でインポートしようとしていると思います。


インポートデータ「"」ダブルクォートされているなら、
OPTIONALLY  ENCLOSED BY で対応できませんか?

http://dev.mysql.com/doc/refman/4.1/ja/load-data …
    • good
    • 0
この回答へのお礼

ありがとうございます
回答が遅くなり申し訳ありません

DBMSはPostgreSQLが8.4、MySQLが5.5になります

コマンドは以下の通りです
COPY (SELECT id, TOCHAR(date, 'YYYY-MM-DD hh:mm:ss'), names) FROM table) TO E'/export.txt' WITH CSV null'\\N';

LOAD DATA INFILE "/export.txt" INTO TABLE table FIELDS TERMINATED BY ",";

これで出力すると以下のようなデータが吐かれます
1行目:1,2011-01-01 01:01:00,"{""A_01"",""A_02""}"
2行目:2,2011-01-02 02:02:00,{""A_03""}
配列外側の二重引用符は、要素が二つ以上のときのみ付くようです


FORCE QUOTE id, date, names とすると日付の部分でエラーになります(文字化けしていて内容は不明です)
日付を除いてFORCE QUOTEし、日付のみ自力で二重引用符を付け、
エディタから改行方法をUNIXのLFのみにしたところ無事インポートすることができました

コマンドは以下の通りになります
COPY (SELECT id, TOCHAR(date, 'YYYY-MM-DD hh:mm:ss'), names) FROM table) TO E'/export.txt' WITH CSV FORCE QUOTE id, names null'\\N';

LOAD DATA INFILE "/export.txt" INTO TABLE table FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"';

問題は、件数が数千件ありますので日付もSQLから二重引用符で囲めるようにしたいのですが何か方法はありませんでしょうか?

お礼日時:2011/08/12 10:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す


おすすめ情報