PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment migrer un attribut de modèle ActiveRecord de json vers jsonb ?

J'écrirais la migration de cette façon :

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

Je ne sais pas comment cela se compare en termes de performances à d'autres solutions, mais j'ai testé cela sur une table avec 120 000 enregistrements, chaque enregistrement ayant quatre json colonnes et il m'a fallu environ une minute pour migrer cette table. Bien sûr, je suppose que cela dépend de la complexité du json structure est.

Notez également que si vos enregistrements existants ont une valeur par défaut de {} , vous devez ajouter aux instructions ci-dessus default: {} , car sinon vous aurez jsonb colonnes, mais la valeur par défaut restera comme '{}'::json .