PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come faccio a migrare un attributo del modello ActiveRecord da json a jsonb?

Scriverei la migrazione in questo modo:

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

Non so come questo si confronti in termini di prestazioni con altre soluzioni, ma l'ho testato su una tabella con 120.000 record, ogni record con quattro json colonne e mi ci è voluto circa un minuto per migrare quella tabella. Ovviamente, immagino dipenda da quanto sia complesso il json struttura è.

Inoltre, nota che se i tuoi record esistenti hanno un valore predefinito di {} , devi aggiungere alle precedenti istruzioni default: {} , perché altrimenti avrai jsonb colonne, ma il valore predefinito rimarrà come '{}'::json .