«

»

7月
17

[RoR]デフォルト値のないNotNullなカラムをadd_columnする場合

既に存在するテーブルにadd_columnでNot Nullなカラムを追加しようとする。

例えば、foosテーブルにnot nullのuser_idを追加するmigrationを記述すると次のようになる。

class AddUserToFoos < ActiveRecord::Migration
  def change
    add_column :foos, :user_id, :integer, :null => false
  end
end

これを使ってrake db:migrateすると、

"Cannot add a NOT NULL column with default value NULL..."

といったようにデフォルト値がNullのNot Nullなカラムを作れないと怒られてしまう。
これは変更対象のテーブルにレコードが存在しなくても同様のエラーとなる。

これの解決方法は、一度null許容なカラムを追加して、後にnot nullに変更するというアプローチで良い模様。

class AddUserToFoos < ActiveRecord::Migration
  def up
    add_column :foos, :user_id, :integer
    change_column :foos, :user_id, :integer, :null => false
  end
 
  def down
    remove_column :foos, :user_id
  end
end

参考

Adding a Non-null Column with no Default Value in a Rails Migration
http://strd6.com/2009/04/adding-a-non-null-column-with-no-default-value-in-a-rails-migration/

[Ruby on Rails][SQLite3] SQLException: Cannot add a NOT NULL column with default value NULL
http://codenote.net/ruby/rails/1041.html

コメントを残す

メールアドレスは公開されません

次の HTMLタグおよび属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>