2015年6月2日火曜日

PostgreSQL COPY文のちょっとした罠

2015年6月2日


ごきげんよう。

先日、PostgreSQLでCOPY文を使って
テーブルにCSVファイルのデータを投入する際に
ちょっとした罠にハマりましたので備忘録を。

# 既知の方も多いと思いますが。。



【環境】
OS:Windows8.1
PostgreSQL:9.4.2
pgAdmin:1.20.0
テキストエディタ:TeraPad 1.09



こんな普通のテーブルを作ります。

CREATE TABLE copy_test
(
  id integer PRIMARY KEY,
  num integer NOT NULL,
  moji text NOT NULL
)




こんな変哲もないCSVデータを作ります。



で、挿入しようとしてCOPY文を実行したところエラーが・・・



ERROR:  型integerの入力構文が無効です: "1"
CONTEXT:  copy_testのCOPY。行番号 1。列 id: "1"
********** エラー **********

ERROR: 型integerの入力構文が無効です: "1"
SQLステート:22P02
コンテキスト:copy_testのCOPY。行番号 1。列 id: "1"




お前は何を言ってるんだ・・(゜ω゜;)
1
が無効ってなんだ・・・



で、いろいろ調べた結果
UTF-8のCSVファイルに BOM ってのが含まれてるので
エラーを吐いているとのこと。

# BOMについては各自検索してあげてください


というわけで
テキストエディタ(今回はTeraPad)でUTF-8NにCSVファイルを変更して上書き保存。






これでCOPY文を再度実行したら、うまくいきました。



地味にハマったので気を付けましょう。


0 件のコメント:

コメントを投稿