「rails」& 「PostgreSQL」 でシステムを構築しています。カラムのデータ型を間違って登録していたので変更しようとすると、エラーになりました。
原因はわかりませんが、対処法がわかったので備忘録として残しておきます。
データ型を「string」から「integer」に変更する
「Order」テーブルの「column_XX」のデータ型を変更します。
まず、migrationファイルを作ります。
⇒ rails g migration ChangeData<変更するカラム名>To<テーブル名> <カラム名:型>
rails g migration ChangeData_column_XX_to_orders column_XX:integer
実行すると、下記のようなmigrationファイルができます。
class ChangeDataColumnXxToOrders < ActiveRecord::Migration
def change
end
end
ここに、変更したいカラムとデータ型を追加で記述します。
今回は「Order」テーブルの「column_XX」のデータ型を「integer」に変更します。
class ChangeDataColumnXxToOrders < ActiveRecord::Migration
def change
change_column :orders, :column_XX, :integer
end
end
保存して、migrationを実行します。
rails db:migrate
うまくいくはずが、エラーとなりました。
エラー発生
PG::DatatypeMismatch: ERROR: column "column_XX" cannot be cast automatically to type integer
こんな感じでエラーが発生。意味がわかりません。
対処法
意味がわかりませんが、下記のように記述を変更するとうまくいきました。
class ChangeDataColumnXxToOrders < ActiveRecord::Migration
def change
change_column :orders, :column_XX, 'integer USING CAST(column_XX AS integer)'
end
end
まとめ
よくわかりませんが、うまくいったのでよしとします。
コメント