前提条件
- Ruby 3.1.0
- Rails 7.0.4
- DB
開発環境:SQLite
本番環境:PostgreSQL
エラー事象
カラムの型をinteger型に変更しようと下記対応をしたところ、デプロイ時にPG::DatatypeMismatch: ERRORが発生した。
$ rails g migration change_data_age_to_user
$ rails db:migrate
migrationファイル
def change
change_column :user, :age, :integer
end
原因
SQLiteとPostgreSQLでchange_column
の記述方法が異なるため。
解消方法
1. migrationファイルを修正
下記のようにUSING CAST
句を付け加えて定義する。
migrationファイル
def change
change_column :user, :age, 'integer USING CAST(user AS integer)'
end
2. コミット~デプロイを再度実行
再度デプロイすると正常終了していることが確認できた。
参考