迁移应该是什么样的?我想利用jsonb数组查询技术。
答案 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
。