Mettre à jour la colonne JSON PostgreSQL en JSONB?

après la mise à niveau vers PostgreSQL 9.4, Comment puis-je convertir toutes mes colonnes JSON en colonnes JSONB?

ça ne me dérange pas de perdre les doubles des clés et des espaces.

24
demandé sur srlm 2015-01-21 22:40:15

2 réponses

ALTER TABLE t ALTER COLUMN j TYPE jsonb USING j::text::jsonb;
39
répondu Tometzky 2017-10-10 17:56:41

dans le contexte des Rails, voici une alternative de migration Active de type corde:

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

j'ai testé ceci 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, cela dépend de la complexité de la structure json .

aussi, notez que si vos enregistrements existants ont une valeur par défaut de {} , vous devez ajouter aux énoncés ci-dessus default: {} , parce que sinon vous aurez les colonnes jsonb , mais la valeur par défaut restera '{}'::json .

2
répondu Alex Popov 2018-06-06 07:59:49