json_populate_record - ¿Actualizar la columna PostgreSQL JSON a JSONB?
postgresql json type (2)
Después de actualizar a PostgreSQL 9.4, ¿cómo convierto todas mis columnas JSON en columnas JSONB?
No me importa perder claves duplicadas y espacios en blanco.
En el contexto de Rails, aquí hay una alternativa de migración 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
Probé esto en una tabla con 120 000 registros, cada registro tenía cuatro columnas json
y me llevó aproximadamente un minuto migrar esa tabla. Por supuesto, depende de cuán compleja sea la estructura de json
.
Además, tenga en cuenta que si sus registros existentes tienen un valor predeterminado de {}
, debe agregarlos a las declaraciones anteriores de default: {}
, porque de lo contrario tendrá columnas jsonb
, pero el valor predeterminado permanecerá como ''{}''::json
.
ALTER TABLE t ALTER COLUMN j TYPE jsonb USING j::text::jsonb;