PostgreSQLにCSVデータをファイルから取り込む
旧システムから新システムへデータ移行を行ったときのメモ。
CSVを取り込む前に対応するテーブルがないと始まらないので、create tableのsqlをゲットするか、csvの1行目を見てテーブルを作成するプログラムを作ったりする。
対応するテーブルがあれば、COPYコマンドを使えば簡単にできる。
# su postgres
$ psql test-db
test-db=# \copy table1 from /opt/csv/table1.csv WITH CSV HEADER
「WITH CSV」を付けるとCSVファイルと認識して、カンマ区切りのデータとして扱ってくれる。
「HEADER」を付けると1行目を無視する。
csvファイルは取り込むDBに合わせて、エンコーディングする必要があるみたい。
ちなみに私が愛用しているエディタxyzzyではここにあるスクリプトを使えば、フォルダ内のファイルを一括で文字コード変換ができる。
一括でやる場合は\copy文をファイルに記述して
test-db=# \i /opt/csv/copy.sql
を実行するば出来る。
<2010/08/23 追記>
コメントで指摘があったので、追記。エンコーディングもコマンドで指定すればできる。こちらの記事を参考に。