むじんブログ ”3歩進んで2歩下がる”

37歳未経験からのエンジニア転職を目指す営業部長

データベースの修正・削除関連

【データベースの作り直し】

・データベースの名称の誤り

エンコードなどのデータベース設定の誤り

 

上記のような場合はデータベースを作り直すとよい。

 

----------------------------------------------------------

【作り直しの方法①:データベース削除】

database.ymlに記載されているエンコード設定や

データベース名の誤りの際に行う。

 

データベース削除(rails db:dropコマンドを実行すると削除できる)

→database.ymlを正しい形に修正

→データベースの再作成(rails db:create)

という手順。

 

----------------------------------------------------------

【作り直しの方法②:データベース削除+マイグレーションファイルの適用】

データベース設定は誤っていないが、再度データベースを作り直して、

既存のマイグレーションファイルを適用させたい際に行う。

 

rails db:migrate:reset

このコマンドで、

データベースの削除→再度生成→既存のマイグレーションファイルを全て適用

が一括で行える。(ただし、データベースの保存内容は全て削除となる)

 

----------------------------------------------------------

【作り直し③:マイグレーションファイルのロールバック

カラムの設定ミスの修正をする際に行う。

この時、適用済みのマイグレーションファイルをそのまま修正してはいけない。

rails db:migrate:statusでマイグレーションファイルの状態を確認できる

 

既存のマイグレーションファイルのロールバック

rails db:rollback

(最新のファイルだけDownになるので、必要な場合は複数回行う)

マイグレーションファイル内のカラム設定の編集

マイグレーションを実行してデータベースに適用

rails db:migrate

ロールバックは1つずつしかできないが、rails db:migrateは全てのファイルをupにする)

 

----------------------------------------------------------

【作り直し④:テーブルの再作成】

関連するマイグレーションファイルのロールバック

rails d modelでモデルを削除

rails g modelでモデルを再作成

マイグレーションファイルを編集してrails db:migrate

 

マイグレーションファイルをupのまま削除してしまった場合】

テーブルを作り直すために、誤って手動でマイグレーションファイルを消したり、

upのままモデルをrails d modelで削除してしまったような場合が該当する。

 

rails db:migrate:statusで確認すると、

upのまま削除されたファイルがNO FILEとして残っている。

 

このファイルはそのままではロールバックできないので、

ファイルのMigration IDを利用して同じ名称で再度ファイルを作成する。

(コピーして手作業で作って、ファイル内にマイグレーションファイルの

デフォルト部分だけを記述する)

 

↓MigrationID_sample.rbという名称で作成した場合

class Sample < ActiveRecord::Migration[6.0]
  def change
  end
end

 

この後、rails db:migrate:statusで状態を確認してロールバックを行い、

Downにしてから削除する。