migrationで複数カラムのindexを生成する時の注意事項

Ruby on Railsではmigrationファイルに

add_index テーブル名, :カラム名, :unique => true

とすることで簡単にテーブルにユニークなindexを生成することが出来ます。


そして、indexに複数のカラムを設定する際は

add_index テーブル名, [:カラム名1, :カラム名2, ・・・], :unique => true

のようにすることで実現できます。


なので、意気揚々とindexを作成していたら以下のようなエラー。

Index name 'xxxxxxxxxxxxxxxxxxx' on table 'テーブル名' is too long; the limit is 64 characters


何も考えず複数カラムでindexを生成していたら、その名前が長くなりすぎて、エラーとのこと。
64文字以内にしなさいね、ということらしいです。

こういった場合は以下のようにして解決します。

add_index テーブル名, [:カラム名1, :カラム名2, ・・・], :unique => true, :name => 'hoge_index'

name属性を生成してやり、そこに任意の名前(上記例ではhoge_index)を付けてやることで解決します。
規則を決めて、indexを作る際は名前を指定していくことが一番安全かもしれません。