Ik zou de migratie op deze manier schrijven:
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
Ik weet niet hoe dit zich qua prestaties verhoudt tot andere oplossingen, maar ik heb dit getest op een tafel met 120.000 records, waarbij elk record vier json
heeft. kolommen en het kostte me ongeveer een minuut om die tabel te migreren. Natuurlijk, ik denk dat het afhangt van hoe complex de json
structuur is.
Merk ook op dat als uw bestaande records een standaardwaarde hebben van {}
, moet u toevoegen aan de bovenstaande verklaringen default: {}
, want anders heb je jsonb
kolommen, maar de standaardwaarde blijft '{}'::json
.