我在开发中创建了一个迁移,以便在我的客户端表中将列类型从整数更改为日期。
迁移:
class UpdateGradToDate < ActiveRecord::Migration
def change
change_column :clients, :grad_id, :date
end
end
在开发方面做得很好。但是,一旦我将其推送到Heroku,我收到以下错误消息。
PG::DatatypeMismatch: ERROR: column "grad_id" cannot be cast automatically to type date
HINT: You might need to specify "USING grad_id::date".
: ALTER TABLE "clients" ALTER COLUMN "grad_id" TYPE date
我不确定如何纠正这个问题。我在考虑使用rails控制台并更改列类型,但我不确定这是否是最佳解决方案。
我也尝试使用此语法创建新的迁移
class ChangeDateFormatInMyTable < ActiveRecord::Migration
def up
change_column :clients, :grad_id, :integer
end
def down
change_column :clients, :grad_id, :date
end
end
我现在还不确定该做什么。
答案 0 :(得分:2)
PostgreSQL错误清楚地解释了这里的问题:
栏&#34; grad_id&#34;不能自动转换为输入日期
您正在尝试将存储整数的字段转换为Date。该字段可以包含任何内容,包括诸如10,0或-200之类的值。如何将这些价值转换为日期?
PostgreSQL告诉你的是你需要帮助他进行转换。
你最好的方法是:
grad_id
重命名为grad_id_legacy
grad_id
日期字段grad_id_legacy
读取每个值,并将相应的转换后的Date值存储到grad_id