データベースの再構築

さて、久々のRails
某所のRailsシステムを再構築し、新しいデータベース構造を効率化しました。
このような場合、古いデータベースから新しいデータベースへデータを移動するわけですが、構造がぜんぜん違うためダンプして突っ込むわけにはいきません。
もちろんSQL文使ってガリガリ変換したり専用ライブラリを使用したりしてもいいのですが、Activerecordを使ったら異常に簡単でした。

  • database.ymlにふるいデータベースを追記
development_old:
  adapter: mysql
  encoding: utf8
  database: olddb_development
  username: *****
  password: *****
  host: localhost
  • 適当な場所に適当なファイル名でrbファイルを作成
  • それぞれのDBにusersというテーブルがあったとしてそれぞれを参照
require 'active_record'

ActiveRecord::Base.configurations = YAML.load_file("configパス/database.yml")

class User < ActiveRecord::Base
end

ActiveRecord::Base.establish_connection(:development)
p User.find(:all)
ActiveRecord::Base.establish_connection(:development_old)
p User.find(:all)
  • とりあえずこれでそれぞれのDBでのデータがずらっと表示される。
  • 新しいデータに組み替える場合、カラム名が違ったりするので、オブジェクトを作ってデータをセットし、セーブ
ActiveRecord::Base.establish_connection(:development_old)
users_old = User.find(:all)

ActiveRecord::Base.establish_connection(:development)

for old_user in users_old
  new_user = User.new   #この時点で既にDBが切り替わっているので新しいDBにnew
  new_user.name = old_user.name
  new_user.age = old_user.nenrei
  new_user.sex = old_user.seibetsu
  new_user.hoge = old_user.hoge
  new_user.save
end

これでお手軽に新しいDBへとデータが移動できる。