如何将 ActiveRecord 模型属性从 json 迁移到 jsonb?
How do I migrate an ActiveRecord model attribute from json to jsonb?
迁移应该是什么样的?我想利用 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 条记录的 table 上测试了它,每条记录有四个 json
列,这花了我大约花一分钟时间迁移 table。当然,我猜这取决于 json
结构的复杂程度。
此外,请注意,如果您现有的记录具有默认值 {}
,您必须添加上述语句 default: {}
,否则您将拥有 jsonb
列, 但默认值将保持为 '{}'::json
.
迁移应该是什么样的?我想利用 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 条记录的 table 上测试了它,每条记录有四个 json
列,这花了我大约花一分钟时间迁移 table。当然,我猜这取决于 json
结构的复杂程度。
此外,请注意,如果您现有的记录具有默认值 {}
,您必须添加上述语句 default: {}
,否则您将拥有 jsonb
列, 但默认值将保持为 '{}'::json
.