読者です 読者をやめる 読者になる 読者になる

null falseなカラムをadd_columnする

Ruby on Rails

すでに作成済みのテーブルにアタタにnot falseなカラムを追加しようとして以下のようにmigrationを行おうとするとエラーが起こる

class AddMaidnumberToMaids < ActiveRecord::Migration
  def change
    add_column :maids, :maidnumber, :string, {null: false}
  end
end
Cannot add a NOT NULL column with default value NULL: ALTER TABLE "maids" ADD "maidnumber"

そのため一度nullを許容するカラムを追加し,その後にnull falseを設定するという方法を取った.

このとき変更するテーブルにデータが存在していると

SQLite3::ConstraintException: maids.maidnumber may not be NULL: INSERT INTO "maids"
(中略)
ActiveRecord::StatementInvalid: SQLite3::ConstraintException: maids.maidnumber may not be NULL:

のようなエラーが起こったため,一旦全てのレコードは削除した.その後に以下のようにmigrationファイルを修正しmigrationを行った

class AddMaidnumberToMaids < ActiveRecord::Migration
  def up
    add_column :maids, :maidnumber, :string
    change_column :maids, :maidnumber, :string, {null: false}
  end

  def down
    remove_column :maids, :maidnumber
  end
end

参考URL

[Ruby on Rails][SQLite3] SQLException: Cannot add a NOT NULL column with default value NULL