LoginSignup
2
2

More than 5 years have passed since last update.

テーブルをリネームしようとしたら「Input string is longer than NAMEDATALEN-1 (63)」が

Last updated at Posted at 2015-02-13

記事タイトルのエラーメッセージは、PostgreSQLの場合ですが、mysqlでも同様のエラーは起こりうると思います。

「テーブル名は63文字以内なのに!」

と言った場合に起きますが、テーブル名をリネームした結果、インデックス名が63文字を超えてしまう場合等に起きるようです。

~/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.3/lib/active_record/connection_adapters/postgresql/schema_statements.rb:426:in `rename_index'
~/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.3/lib/active_record/connection_adapters/abstract/schema_statements.rb:850:in `block in rename_table_indexes'
~/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.3/lib/active_record/connection_adapters/abstract/schema_statements.rb:847:in `each'
~/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.3/lib/active_record/connection_adapters/abstract/schema_statements.rb:847:in `rename_table_indexes'

こんな感じ。


テーブル名を変更する前に、インデックス名を63文字以内に収まるようにリネームしてあげると解決するみたいなので、そうしてあげましょう

class RenameTable < ActiveRecord::Migration
  def change
    rename_index :table, :index_table_aaaaaa_id_and_bbbbbb_id_and_ccccccc_id, :index_table_columns
    rename_table :table, :long_long_long_table_name
  end
end
2
2
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
2
2