#db:migrateしたデータベースを修正したい場合
プログラミングスクールでのチーム開発学習中にデータベースの修正を行いたかったのですが、
細かい部分の知識が抜け落ちていたので、備忘録用にまとめてます。
データベースの操作に慣れていない方や、これからデータベースを学習する方の参考にもなれば幸いです。
###開発環境
DB: MySQL
Rails: 5.2.4.3
まず自分が修正したいデータベース(テーブル)の確認を行いましょう
% rails db:migrate:status
すると、テーブルがこの様に出てくると思います(出てくるテーブルの数や名前はそれぞれ違ってきます)
Status Migration ID Migration Name
--------------------------------------------------
up 20200823051138 Devise create ----s
up 20200824122031 Create -------s
up 20200824122659 Add ancestry to ------s
up 20200824123715 Create -----s
up 20200829083145 Create -----s
up 20200906141656 Create -----s 今回はこのテーブルを修正したい
up 20200907114227 Create -----s
down 20200927061950 Create -----s
down 20200927065357 Create -----s
※----は自分で作成したテーブル名
ここでupとdownに注目です。
マイグレーションの修正を行うには、statusをdownの状態にしておく必要があります。
##次に自分が修正したいデータベース(テーブル)をdownにしましょう
downの状態にするにはターミナルでこの様なコマンドを実行しましょう
% rails db:rollback
もう一度statusを確認してみましょう
% rails db:migrate:status
Status Migration ID Migration Name
--------------------------------------------------
up 20200823051138 Devise create ----s
up 20200824122031 Create -------s
up 20200824122659 Add ancestry to ------s
up 20200824123715 Create -----s
up 20200829083145 Create -----s
up 20200906141656 Create -----s 今回はこのテーブルを修正したい
down 20200907114227 Create -----s
down 20200927061950 Create -----s
down 20200927065357 Create -----s
※----は自分で作成したテーブル名
あれ?
一つ下しかdownに変わってません。
というのもrollbackコマンドは一つずつしかdownに変えられないのです。
なので、もう一度やってみましょう。
% rails db:rollback
もう一度statusを確認してみましょう
% rails db:migrate:status
Status Migration ID Migration Name
--------------------------------------------------
up 20200823051138 Devise create ----s
up 20200824122031 Create -------s
up 20200824122659 Add ancestry to ------s
up 20200824123715 Create -----s
up 20200829083145 Create -----s
down 20200906141656 Create -----s 今回はこのテーブルを修正したい
down 20200907114227 Create -----s
down 20200927061950 Create -----s
down 20200927065357 Create -----s
※----は自分で作成したテーブル名
今度は無事に目的のテーブルをdownに出来ました。
##修正が終わった後
今回はカラム名の修正を行いたかったので、この後にマイグレーションファイルのカラム名の変更を行いました。
最後に
% rails db:migrate
もう一度statusを確認しておきましょう
% rails db:migrate:status
Status Migration ID Migration Name
--------------------------------------------------
up 20200823051138 Devise create ----s
up 20200824122031 Create -------s
up 20200824122659 Add ancestry to ------s
up 20200824123715 Create -----s
up 20200829083145 Create -----s
up 20200906141656 Create -----s 修正したテーブル
up 20200907114227 Create -----s
up 20200927061950 Create -----s
up 20200927065357 Create -----s
※----は自分で作成したテーブル名
rails db:migrateコマンドの場合は、downのテーブルを全てupに変更します。
db:migrateは1度で全てupにするけど
db:rollbackは1つずつしかdownに出来ないんですね。
##一度にrollbackをまとめて行いたい場合
今回の様に複数回rollbackを行わないといけない場合にまとめて行える方法も紹介します
% rails db:rollback STEP=2
※STEP=2を入力する事でrollbackを2回分まとめて実行してくれます。
rollbackコマンドに慣れてきたら、STEPオプションも積極的に使って、作業性をあげていきましょう。