0
0

More than 1 year has passed since last update.

Mysql2::Error: Duplicate column name 'xxxx'が出たときは既にあるカラムを消そう

Posted at

背景

あるテーブルに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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0