PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como faço para migrar um atributo de modelo ActiveRecord de json para jsonb?


Eu escreveria a migração desta forma:
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

Não sei como isso se compara em termos de desempenho a outras soluções, mas testei isso em uma tabela com 120.000 registros, cada registro com quatro json colunas e levei cerca de um minuto para migrar essa tabela. Claro, acho que depende de quão complexo o json estrutura é.

Além disso, observe que, se seus registros existentes tiverem um valor padrão de {} , você deve adicionar às instruções acima default: {} , porque senão você terá jsonb colunas, mas o valor padrão permanecerá como '{}'::json .