如何将字符串数据类型迁移到hstore

时间:2017-01-09 12:14:02

标签: ruby-on-rails ruby-on-rails-4 ruby-on-rails-3.2 postgresql-9.3

我正在将rails 3应用程序升级到rails 4.根据指南,我从模型中删除了这一行

serialize :my_serialized_column, ActiveRecord::Coders::Hstore.new({})

但现在我在循环:my_serialized_column之前收到了错误,这是以前的哈希

  

未定义的方法`每个' for"":String

现在我的问题是如何在不丢失已有数据的情况下更改列的data_type

1 个答案:

答案 0 :(得分:0)

因此,您只需将列的数据类型从string更改为hstore

要记住的一件事是你需要将数据转换为hstore,否则你将收到以下错误

PG::DatatypeMismatch: ERROR:  column "my_serialized_column" cannot be cast automatically to type hstore
HINT:  You might need to specify "USING my_serialized_column::hstore".

为避免错误,您可以指定投射

class ChangeMySerializedColumnTypeToHstore < ActiveRecord::Migration
  def up
    change_column_null :my_table, :my_serialized_column, ''
    change_column :my_table, :my_serialized_column, "hstore USING my_serialized_column::hstore"
  end

  def down
    change_column :my_table, :my_serialized_column, :string, default: ''
  end

end