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

コメント

  1. ¥encoding コマンドでCSVファイルのエンコーディングを指定できますよ

    返信削除
  2. 本当だ。できますね。
    情報ありがとうございます。

    返信削除

コメントを投稿

このブログの人気の投稿

【.NET】DataGridViewを選択した際に背景色を変更しない

【PostgreSQL】ROWNUMのように行番号(現在行)を取得するROW_NUMBER

Can't open PID file /var/run/nginx.pid (yet?) after start: Too many levels of symbolic links