Postgresql 9.1でCOPYを使用し、csvファイルからデータをインポートする

PostgresqlのテーブルにCSV形式のデータを一括で取り込みたい場合、
COPYを使用すれば良さそうです。

http://www.postgresql.jp/document/current/html/sql-copy.html

どんな形式のCSVファイルが通るかわからなかったので調べてみました。



テーブルの作成



こんなサンプルのテーブルを作成しました。


CREATE TABLE csv_sample (
数値 int,
文字列 varchar(100),
日付 date,
日付時刻 timestamp
);



とりあえず、数値と文字列、それに時刻系のフィールドを試しています。







取り込むCSVファイル



サンプルなので1行分。


"1","日本語文字列","2010-10-11","2010-10-11 12:10:20"





この内容で、/var/local/test.csvに保存しました。






copyコマンド実行



最初、psqlやcreateuserみたいに、postgresユーザーで使えるコマンドかと思っていたのですが
psqlで実行します。

作成したファイルをcsv_sampleテーブルにコピーする構文はこんな感じ。


COPY csv_sample FROM '/var/local/test.csv' WITH CSV;





実行している様子はこんな風になりました。
psqlを起動し、\cで使用するデータベースをtestに変更。
copyコマンドでデータを登録しています。


[postgres@(none) ~]$ psql
psql (9.1.3)
Type "help" for help.

postgres=# \c test
You are now connected to database "test" as user "postgres".
testu=# COPY csv_sample FROM '/var/local/test.csv'WITH CSV;
COPY 1



COPY 1というのは1行インサートしたという意味です。
数値か日付の登録でエラーになると思っていたのですがあっさり通りました。


ちなみに、COPYはテーブルに元あったデータは残ります。
登録をやり直す場合は、一旦TRUNCATEしてデータを削除してやる必要があるかと。


testu=# TRUNCATE TABLE csv_sample;
TRUNCATE TABLE
testu=# COPY csv_sample FROM '/var/local/test.csv' WITH CSV;
COPY 1






【参考URL】

http://www.postgresql.jp/document/current/html/sql-copy.html



関連記事

コメント

非公開コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
Symfoware まとめ

PR




検索フォーム

月別アーカイブ