ruby-on-rails - 如何将 ActiveRecord 模型属性从 json 迁移到 jsonb?

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

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

最佳答案

我会这样写迁移:

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

关于ruby-on-rails - 如何将 ActiveRecord 模型属性从 json 迁移到 jsonb?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50024841/

相关文章:

ruby-on-rails - 版本控制 Grape active_model_serializers

c# - 从 C# 设置/运行 PostgreSQL

ruby-on-rails - ActiveRecord bool 验证接受非 bool 值

sql - 联接表记录不存在的Active Record

PostgreSQL,带条件的总和

ruby-on-rails - 如何在 Rails 5 中为委托(delegate)方法定义自定义名称?

jquery - 如何在 Rails 3 中提交到远程

ruby-on-rails - 比 Apache Solr 更快的搜索平台/索引引擎?

javascript - 如何自定义将附加到请求参数的数据 : :confirm popup to prompt for an input,?

PostgreSQL 函数在循环函数中动态 reshape 和创建表