在Heroku中运行Rails迁移的问题

时间:2016-06-24 18:00:24

标签: ruby-on-rails ruby ruby-on-rails-4 heroku

我在开发中创建了一个迁移,以便在我的客户端表中将列类型从整数更改为日期。

迁移:

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

我现在还不确定该做什么。

1 个答案:

答案 0 :(得分:2)

PostgreSQL错误清楚地解释了这里的问题:

  

栏&#34; grad_id&#34;不能自动转换为输入日期

您正在尝试将存储整数的字段转换为Date。该字段可以包含任何内容,包括诸如10,0或-200之类的值。如何将这些价值转换为日期?

PostgreSQL告诉你的是你需要帮助他进行转换。

你最好的方法是:

  1. grad_id重命名为grad_id_legacy
  2. 创建新的grad_id日期字段
  3. 运行一个脚本,该脚本从grad_id_legacy读取每个值,并将相应的转换后的Date值存储到grad_id