背景
あるテーブルに3つのカラム追加する実装。
一度migrateでエラー
$ rails db:migrate
Mysql2::Error: Unknown column 'xxx' in 'zzz': ALTER TABLE `zzz` ADD `xxx` varchar(255) COMMENT 'xxx' AFTER `xxx`
原因としてあるカラムを追加する際に、afterを使用してカラム位置を指定したが、その指定したカラム名を間違っていたためエラーを吐いていた。
再度、カラム名を修正してmigrateすると
$ rails db:migrate
Mysql2::Error: Duplicate column name 'xxx': ALTER TABLE `zzz` ADD `xxx` varchar(255) COMMENT 'xxx' AFTER `zzz`
エラーを吐いていたが、エラー前に実行されたadd_columnでカラム追加されていた様で
同じカラムが存在していると再度エラーになった。
対処法
まず、Duplicate column nameが出ているので、テーブルを確認してカラムが追加されているか確認。
確認ができたら、migrateファイル自体は実行されずにdownになっているので空のファイルにしてupにする。
class XXXXXXXXXXX < ActiveRecord::Migration[5.2]
def change
end
end
$ rails db:migrate
そしたら、追加されてしまっていたカラムだけを追記してrollback
class XXXXXXXXXXX < ActiveRecord::Migration[5.2]
def change
add_column :zzz, :xxx, :string, after: :sss, comment: "コメント"
add_column :zzz, :xxx, :string, after: :ddd, comment: "使った方が良い"
end
end
$ rails db:rollback
するとテーブルがmigrateする前の綺麗な状態に戻るので、再度全てのカラムを記載してmigrate
class XXXXXXXXXXX < ActiveRecord::Migration[5.2]
def change
add_column :zzz, :xxx, :string, after: :sss, comment: "コメント"
add_column :zzz, :xxx, :string, after: :ddd, comment: "使った方が良い"
add_column :zzz, :xxx, :string, after: :ddd, comment: "後から分かる"
end
end
$ rails db:migrate