• ベストアンサー

テーブルにcsvファイルをインポートできない

かなり困っています。REDHAT LINUXでpostgresのテーブルにpsqlからのCOPYコマンドでcsvファイルのデータをインポートしようとしているのですが、文字数オーバーのエラーがでてしまいます。テーブルは2列で1つ目の列はCHAR(10)で2列目はINT4型です。csvファイルの内容はとりあえず1行だけ入れていて「"1234567890","1234"」を入れています。コマンドはpsqlで「COPY テーブル FROM 'ファイルのパス' USING DELIMITER ","」で行いました。エラーはおそらくインポートしたデータがおかしくなって変な桁数になっているのですが、どういうふうにおかしくなっているのかがよくわからないので対策できません。

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

案1)エディタ等を使って、二重引用符を除去してからインポートさせる。 案2)インポートするのに十分なレコード長をもったインポート専用テーブルを作成して、そこに一旦インポートさせてから、適当に加工して目的のテーブルにinsertする。 案3) copy with csvが使えるバージョンにあげる。 ――とか。

noname#246722
質問者

お礼

こんにちは。おかげさまで解決しました。アクセス経由のODBCでのインポートすることになりました。確かに別テーブル経由だとコマンド一発でできそうでスッキリしますのでそちらのほうがよかったかもしれませんね。

その他の回答 (1)

回答No.2

「"」(ダブルクォーテーション)も文字数に換算されているので、 「"1234567890"」は12文字のデータをINSERTしようとしてエラーになっているのだと思います。 また、2カラム目はINTEGERとのことなので、そもそもクォーテーションやダブルクォーテーションで囲ったらよくないです。^^ ダブルクォーテーションを外して試してみてください。

noname#246722
質問者

お礼

こんにちは。おかげさまで解決しました。ダブルコーテーションも原因でしたが、CSVのデータの行の一番後ろに改行コードが入っていてそれがINTEGER型のカラムでひっかかっていました。結局はアクセス経由のODBCでのインポートになりました(~~)

関連するQ&A