Dans postgresql 9.4, le nouveau JSONB a été incorporé.
Sur une base de données en direct dans postgresql 9.3, j'ai une colonne JSON.
Je veux le migrer vers JSONB.
En supposant que j'ai d'abord migré la base de données vers 9.4 (en utilisant pg_upgrade). Que dois-je faire ensuite?
ALTER TABLE table_with_json
ALTER COLUMN my_json
SET DATA TYPE jsonb
USING my_json::jsonb;
Dans le cadre de Rails, voici une alternative de migration ActiveRecord:
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 à la réponse acceptée en termes de performances, mais je l'ai testée sur une table avec 120 000 enregistrements, chaque enregistrement ayant quatre colonnes json
et il m'a fallu environ une minute pour migrer cette table . Bien sûr, je suppose que cela dépend de la complexité de la structure json
.
Notez également que si vos enregistrements existants ont une valeur par défaut de {}
, vous devez ajouter aux déclarations ci-dessus default: {}
, car sinon vous aurez jsonb
colonnes, mais la valeur par défaut restera comme '{}'::json
.