如何将ActiveRecord模型属性从json迁移到jsonb?

时间:2018-04-25 14:27:57

标签: ruby-on-rails postgresql rails-activerecord jsonb rails-postgresql

迁移应该是什么样的?我想利用jsonb数组查询技术。

1 个答案:

答案 0 :(得分:3)

我会用这种方式编写迁移:

def change
  reversible do |dir|
    dir.up { change_column :models, :attribute, 'jsonb USING CAST(attribute AS jsonb)' }
    dir.down { change_column :models, :attribute, 'json USING CAST(attribute AS json)' }
  end
end

我不知道这与其他解决方案在性能方面有何比较,但我在一张包含120,000条记录的表格上对此进行了测试,每条记录有四个json列,我花了大约一分钟才进行迁移那张桌子。当然,我想这取决于json结构的复杂程度。

另请注意,如果您的现有记录的默认值为{},则必须添加上述语句default: {},否则您将拥有jsonb列,但默认值将保持为'{}'::json