在迁移到heroku期间无法更改列类型

时间:2013-09-20 00:04:53

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

这是我在尝试运行heroku run rake db:migrate

时得到的内容

sender_idstring

==  ChangeTypeToInteger: migrating ============================================
-- change_column(:messages, :sender_id, :integer)
rake aborted!
An error has occurred, this and all later migrations canceled:

PG::Error: ERROR:  column "sender_id" cannot be cast automatically to type integer
HINT:  Specify a USING expression to perform the conversion.
: ALTER TABLE "messages" ALTER COLUMN "sender_id" TYPE integer/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.12/lib/active_record/connection_adapters/postgresql_adapter.rb:652:in `exec'

1 个答案:

答案 0 :(得分:0)

我引用手册about ALTER TABLE

  

如果没有隐式或赋值,则必须提供USING子句   从旧型转变为新型。

您需要的是:

ALTER TABLE messages ALTER COLUMN sender_id TYPE integer

只要所有条目均可转换为integer,此可使用或不使用数据
如果您为列定义了DEFAULT,则可能必须删除并重新创建新类型。

这是blog article on how to do this with ActiveRecord