create_table :hogehoge_mogemoges do |t| t.column :ahaha_id, :integer t.column :ihihi_id, :integer t.column :uhuhu_id, :integer t.column :ehehe_id, :integer t.column :ohoho_id, :integer t.column :valval, :string end add_index :hogehoge_mogemoges,[:ahaha_id,:uhuhu_id,:ohoho_id],:unique => true
rake db:migrate
は普通に成功したのですが、indexが作成されていませんでした。
indexが作成されない理由は、作成されるindex名に原因があります。
この場合は、
index_hogehoge_mogemmoges_on_ahaha_id_and_ihihi_id_and_uhuhu_id_and_ehehe_id_and_ohoho_id
という名前のインデックスを作成をすることになります。
mysqlに直接、このインデックスを作成しようとすると
ERROR 1059 (42000): Identifier name 'index_hogehoge_mogemmoges_on_ahaha_id_and_ihihi_id_and_uhuhu_id_and_ehehe_id_and_ohoho_id' is too long
とエラーが出てて作れません。
たしかにtoo longです。
mysqlでは、インデックスに使えるのは最大64文字のようです。
でこれを解決するには、以下のようにadd_indexで名前を渡せばよいだけです。
add_index :hogehoge_mogemoges,[:ahaha_id,:uhuhu_id,:ohoho_id],{:unique => true, :name =>
"ind_hogemoge_aiueo"}
0 件のコメント:
コメントを投稿