postgreSQL8.1xにExcelで作成したcsvファイルをインポートする
ひょんなことで、
Excelで作成したcsvファイルを直接postgreSQLに投入する仕事があった時の話やけど・・
よく、DELIMITERを指定するサンプルがあるのですが、あれだと改行や , が含まれると、Excelから保存したてのほやほやファイルではエラーがでますよね。
意外とネットを探し回ってもDELIMITER指定するものばかりで、ぜんぜんうまくいかないんですよね・・・
改行やら区切り文字を変換するPG作るのも大変だし、なんか”さぁ~”っと入ってくれないかな~なんて、思いながらいろいろ調べていると、簡単な事でした(笑)
※でも、調べるのに相当時間がかかりました(涙)
今回も、せっかくなので覚書しておきます。
■postgreSQLへのデータ投入に関して
Excelで作成したCSVファイルは、shift_jisなので、
利用しているデータベースの文字コード(今回はutf-8)に合わせて、
文字コード変換が必要なんです。
知っとるわ~ って?
文字コード変換では、lvを利用しました。
RedhatES4は、初期ではその機能をもっていないので、
追加インストールしました。
なんで始めっから入ってないねん(愚痴
#ダウンロードする
% wget http://www.ff.iij4u.or.jp/~nrt/freeware/lv451.tar.gz
% tar xvfz lv451.tar.gz
% cd lv451/build
% ../src/configure
% make
% make install
#おしまい
▼データ投入手順
<対象データ>
テーブルに会わせた書式のデータをExcelで作成しcsv形式で保存したデータ
<手順>
1)Excel(CSV)保存
2)Redhatファイルシステムへ転送
3)UTF-8形式へ変換 (コマンド)
4)postgreSQLへ取込 (コマンド)
<コマンド>
#utf8へ変換
%lv -Ou8 file_shift_jis.csv > file_utf8.csv
#postgreSQLへ取込
%COPY table_name FROM ‘/file_system/file_name.csv’ CSV QUOTE ‘”‘;
テーブル名がtable01で、ファイル名がtest.csvで、保存場所が/usr/local/src だとすると、こんな感じです。
COPY table01 FROM ‘/usr/local/src/test.csv’ CSV QUOTE ‘”‘;
意外と知らなかったりしますよね。
また、lvは改行コードまで、\r\n -> \n に変えてくれてました。ありがたや~。
以上です。