sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo migro un atributo de modelo ActiveRecord de json a jsonb?

Escribiría la migración de esta manera:

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

No sé cómo se compara esto en términos de rendimiento con otras soluciones, pero probé esto en una tabla con 120 000 registros, cada registro con cuatro json columnas y me tomó alrededor de un minuto migrar esa tabla. Por supuesto, supongo que depende de cuán complejo sea el json la estructura es.

Además, tenga en cuenta que si sus registros existentes tienen un valor predeterminado de {} , debe agregar a las declaraciones anteriores default: {} , porque de lo contrario tendrás jsonb columnas, pero el valor predeterminado permanecerá como '{}'::json .