LoginSignup
1
2

More than 5 years have passed since last update.

csvデータをPostgreSQLのCOPYコマンドを使ってDBに取り込む(insert)方法

Last updated at Posted at 2017-12-14

データを取り込む処理は既に実装されていたので最初はrails runnerを使ってたのだが、遅い。

処理が全然終わらないので、直接DBへ取り込む形に変更した。

rails runnerの場合

> rails runner hogehoge.rb

DBへ直接取り込む場合(COPY)

COPY shop_sales (sales_date,shop_id,sales)
FROM '/Users/taku/hogehoge.csv' with csv;

すげー簡単。ビックリ。
でも、何よりビックリしたのが、バカみたいに早い。
うん時間かかっていたのが、数秒で終わっちゃう。

はまった所としては、最初idのカラムを作ってしまっていたのだがRailsでは自動で採番してくれるようになっているので不要だった。

まとめ

お互いメリット、デメリットがあって基本的にはやっぱり既存のコードを使う方が良い。
何故ならデータにミスがあってもバリデーションが働くから。

それに対して直接取り込む場合は、それが無いので

  • nil それとも 0 ?
  • 日付は正しい形式になってる?

などなど本当に正しいデータ形式なのかしっかり確認しておかないと思わぬ障害を作ってしまう。

なので、既存のコードでsaveされる直前のデータを確認しcsvデータが同じ形式になっているかをチェックするようにしました。

そんな感じ。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2