Home > PROGRAM SAMPLE > postgreSQL8.1xにExcelで作成したcsvファイルをインポートする

postgreSQL8.1xにExcelで作成したcsvファイルをインポートする

11月 18th, 2006

ひょんなことで、

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 に変えてくれてました。ありがたや~。

以上です。

PROGRAM SAMPLE

  1. No comments yet.
  1. No trackbacks yet.