移行は次のように記述します:
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レコードのテーブルでこれをテストしました。各レコードには、4つのjson
があります。 列とそのテーブルを移行するのに約1分かかりました。もちろん、それはjson
の複雑さに依存すると思います 構造はです。
また、既存のレコードのデフォルト値が{}
の場合も注意してください。 、上記のステートメントにdefault: {}
を追加する必要があります 、それ以外の場合はjsonb
があるため 列ですが、デフォルト値は'{}'::json
のままになります 。