[Rails]型変更でマイグレーションエラー(change_column)

Pocket

ある項目の値が、int型では小さい(実際は多分大丈夫だけど)ので、型をbigint型に変更することになりました。よくある話だと思いますが、タイトルにもあるように、railsを使ったマイグレーションでエラーが発生。マジでイライラしました。

スポンサーリンク

マイグレーションファイル

使用したのは以下のマイグレーションファイルです。

def change
    change_column :tables, :col, "BIGINT"
end

エラーの内容は次のものです。関係あるかないかは知りませんが、データベースはmysql、Railsは6.1です。

$ bundle exec rails db:migrate
== 20211103115588 ChangeColumnType: migrating =============================
rails aborted!
StandardError: An error has occurred, all later migrations canceled:

=== Dangerous operation detected #strong_migrations ===

Changing the type of an existing column blocks writes
while the entire table is rewritten. A safer approach is to:

1. Create a new column
2. Write to both columns
3. Backfill data from the old column to the new column
4. Move reads from the old column to the new column
5. Stop writing to the old column
6. Drop the old column

やり方が気に食わないとのことです。お気に入りのやり方に従えとのことです。本当にふざけてますね。怒りMAXです。

でも、マイグレーションを次のように記載することで型変更はできるようになります。抜け道があるわけですね。なければ、railsなんて誰も使わないと思いますが、デフォルトでエラーかますのには腹が立ちます。

def change
  safety_assured {
    change_column :tables, :col, "BIGINT"
  }
end

(愚痴、おしまい)

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *