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 追記>
コメントで指摘があったので、追記。エンコーディングもコマンドで指定すればできる。こちらの記事を参考に。