MSーACCESSのデータをpostgresqlにコンバートしました。


といいてもpostgresql超初心者の私ですのでcsvファイルをこつこつとviで編集してみました。
なんだかcopyコマンドとか便利そうなコマンドがあったのですが使い方がよくわからなかったので
こうやってみました。
でもこの方法は知っていれば他のdbへも移行できるし、テキストファイルの編集に応用できるので
このサイトに残しておくことにしました。

まず元データこんな感じのcsvだったとします。 (MS-ACCESSで作成したファイルは当然SJIS形式ですのでnkf等でeuc形式に変換 しておく必要がありますね。nkfの使用方は こちら を参考にして下さい。
ファイル名は frinds.csvとします。)
以下 friends.csvの中身

9872345,平成 太郎,ヘイセイ タロウ,大阪府大阪市,06-6123-4567
5690825,杉岡 研史,スギオカ ケンジ,大阪府高槻市,0726-123-4567
3325567,山田 花子,ヤマダ ハナコ,東京都品川区,03-3123-4567

例えばinsertしたいテーブル名がfriendsの時、まず先頭行に
insert into friends values ('
という文字列を付加します。
vi で次のコマンドを打ちます。
:%s/^/insert into friends values ('/g

これの意味は ^すなわち、行頭を "insert into friends values ('" で置き換えろという意味ですね。
この結果は以下のようになります。

insert into friends values ('9872345,平成 太郎,ヘイセイ タロウ,大阪府大阪市,06-6123-4567
insert into friends values ('5690825,杉岡 研史,スギオカ ケンジ,大阪府高槻市,0726-123-4567
insert into friends values ('3325567,山田 花子,ヤマダ ハナコ,東京都品川区,03-3123-4567

次に行末に "') ;" を付加します。
:%s/$/') ;/g
$は行末を示しますね。ですので行末を");"で置き換えろとしているのです。
この結果は以下のようになります。

insert into friends values ('9872345,平成 太郎,ヘイセイ タロウ,大阪府大阪市,06-6123-4567') ;
insert into friends values ('5690825,杉岡 研史,スギオカ ケンジ,大阪府高槻市,0726-123-4567') ;
insert into friends values ('3325567,山田 花子,ヤマダ ハナコ,東京都品川区,03-3123-4567') ;

あとは各値をシングルコーテーションで囲んでやります。
:%s/,/','/g
と打ち込むことで以下のようなsql文が完成しましたね。
insert into friends values ('9872345','平成 太郎','ヘイセイ タロウ','大阪府大阪 市','06-6123-4567') ;
insert into friends values ('5690825','杉岡 研史','スギオカ ケンジ','大阪府高槻 市','0726-123-4567') ;
insert into friends values ('3325567','山田 花子','ヤマダ ハナコ','東京都品川区','03-3123-4567') ;
 

あとはこれを実行してやるだけです。
もちろん psql から実行してもいいし、
コマンドラインから
psql testdb -f friends.csv    (db名をtestdbとしている)
でスクリプトとして実行してもいいですね。

以上でださい?ですが無事コンバート完了です。
 
 

[へなちょこlinuxのコーナーへ]         [ホームへ]