データベースの再構築
さて、久々の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へとデータが移動できる。