PostgreSQLでテーブルの型をintegerにしたらPG::DatatypeMismatch: ERRORで失敗した
テーブルでstring型 を integer型 に変更しようとしたらマイグレーションができませんでした。
== 20210213101041 ChangeDatatypeStatusOfScores: migrating ===================== -- change_column(:scores, :status, :integer) rails aborted! StandardError: An error has occurred, this and all later migrations canceled: PG::DatatypeMismatch: ERROR: column "status" cannot be cast automatically to type integer HINT: You might need to specify "USING status::integer".
エラー文には
「statusカラムは自動的に整数型にできないよ」
「ヒント:USING句を使用しましょう」
というようなことが書かれています。
ヒントのまんま"USING status::integer"を使ってみましたが、マイグレーションできませんでした...
調べてみたところ下記のように記述するようです。
変更したいデータ型 CAST(カラム名 AS 変更したいデータ型)
CAST 関数は引数に指定した値(カラム名)を別のデータ型に変換するために使用します。
class ChangeDatatypeStatusOfScores < ActiveRecord::Migration[6.0] def change # change_column :scores, :status, :integer (変更前) change_column :scores, :status, "integer USING CAST(status AS integer)" end end
これでデータ型の変更ができました。