4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Not Null 制約付きのカラムを既存テーブルに追加するマイグレーションで気をつけるべきこと

Last updated at Posted at 2018-11-02

Not Null 制約付きのカラムを既存テーブルに追加するマイグレーションで気をつけるべきこと

既にデータを持っているテーブルに対して、デフォルト値を持たない Not Null 制約を持ったカラムを追加すると

column "test" contains null values (SQL: alter table "test_table" add column "test" integer not null)

上記エラーが発生する。
既存のテーブル行に対して新しく追加される列には初期値が Null で格納されるため、Not Null 制約に反してしまうため。

回避策

  1. 本当は Not Null 制約 を true にしてカラム追加したいところだが、false にしてマイグレーション実行
  2. UPDATE 文や UPSERT 文などでテーブルデータを修正して Null をなくす
  3. Not Null 制約 を true にするマイグレーションファイルを別途作成してマイグレーション実行

マイグレーションファイルはファイル名の昇順で実行される

既存ファイル、新規ファイル、CREATE、INSERT、UPDATE、ALTER TABLE などのマイグレーションファイルが入り乱れるとき、リネームして実行順を考慮することがある。
Laravel の migration は実行したマイグレーションファイル名を DB で管理し、 DB で管理されていないマイグレーションファイルが実行対象となる。よって実行済みの既存マイグレーションファイルには何も修正を加えず、毎回新しいファイルを作成いくのがベター。

4
3
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
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?