如何将ActiveRecord模型属性从json迁移到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条记录的表上进行了测试,每条记录有四个json列,我花了大约一分钟来迁移该表。 当然,我想这取决于json结构的复杂程度。

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