【问题标题】:How do I migrate an ActiveRecord model attribute from json to jsonb?如何将 ActiveRecord 模型属性从 json 迁移到 jsonb?
【发布时间】:2018-04-25 14:27:57
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    我会这样写迁移:

    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.

    【讨论】:

    • 这会因 rails 5.2.4.3 而失败。引起:PG::SyntaxError:错误:在“USING”或附近出现语法错误第 1 行:SELECT 'jsonb USING associations::jsonb'::regtype::oid ^ CONTEXT:无效类型名称“jsonb USING associations::jsonb”
    猜你喜欢
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    相关资源
    最近更新 更多