プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (2件)

「"」(ダブルクォーテーション)も文字数に換算されているので、


「"1234567890"」は12文字のデータをINSERTしようとしてエラーになっているのだと思います。

また、2カラム目はINTEGERとのことなので、そもそもクォーテーションやダブルクォーテーションで囲ったらよくないです。^^

ダブルクォーテーションを外して試してみてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/11/05 10:16

案1)エディタ等を使って、二重引用符を除去してからインポートさせる。


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

――とか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/11/05 10:19

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

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