Symfoware

Symfowareについての考察blog

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



関連記事

テーマ:データベース - ジャンル:コンピュータ

  1. 2012/05/06(日) 19:19:39|
  2. PostgreSQL
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Postgresql 9.1のCOPYでファイルの文字コードを指定する | ホーム | PostgresqlのCollateとCtype指定によるORDER BYの差異>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
https://symfoware.blog.fc2.com/tb.php/941-2931b1f9
この記事にトラックバックする(FC2ブログユーザー)