はじめに
railsアプリを作成中にタイトルのようなエラーにエンカウントしたので備忘録として
Index name 'index_foo' on table 'bar' already exists
同じ名前のindexがありますよというエラーです。
indexってなんぞやという人はこちらをどうぞ -> データベースにindexを張る方法
とりあえずmysqlにログインして状態を確認する
参考記事rails generate migrationしてエラーが出たときの対処法
$ mysql -u ユーザ名 -D database名 -p
-u ユーザ名指定するオプション
-D 接続先databaseを指定するオプション
-p パスワードを送信するオプション
なおデータベース名がわからなくなった場合は、config/database.yml
を確認すると書いてある
migrationがどこまで進んでいるのか確認する。railsのlogにも書いてあるが、再度確認。
mysql> select * from schema_migrations;
実行されたマイグレーションファイルが出てきます。
僕の場合は20200613が実行されていなければいけないのですが出てきませんでした。
tableが作成されているのか確認
mysql> show columns from hoges; # hogeには作成したtable名を入れてください
tableは存在しているようです。なければエラーを吐かれます。
次はindexが貼られているかの確認です。
mysql> show index from hoges;
エラー内容は、同じ名前のindexがすでに存在しますよ
でした。
となると、マイグレーションファイルの書きミスかなあ。
身に覚えがないが、思い当たる節として、今回はmodel作成の時にreferences
を使いました。これか!
調べてみると外部キー作成時は自動でindexを貼ってくれる
みたい。2重で貼ってました…
外部キーを作成する際は気をつけましょう。