from - postgresql jsonb example
postgresql migrando JSON a JSONB (2)
Esta pregunta ya tiene una respuesta aquí:
- ¿Actualizar la columna JSON de PostgreSQL a JSONB? 2 respuestas
En postgresql 9.4, se incorporó el nuevo JSONB.
En un DB vivo en postgresql 9.3 tengo una columna JSON.
Quiero migrarlo a JSONB.
Asumiendo que migré el DB primero a 9.4 (usando pg_upgrade). ¿Que hago después?
En el contexto de Rails, aquí hay una alternativa de migración de 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
No sé cómo se compara esto con la respuesta aceptada en cuanto al rendimiento, pero probé esto en una tabla con 120 000 registros, cada registro con cuatro columnas json
y me tomó alrededor de un minuto migrar esa tabla. Por supuesto, supongo que depende de cuán compleja sea la estructura json
.
Además, observe que si sus registros existentes tienen un valor predeterminado de {}
, debe agregar a las declaraciones anteriores el default: {}
, porque de lo contrario tendrá columnas jsonb
, pero el valor predeterminado seguirá siendo ''{}''::json
.
ALTER TABLE table_with_json
ALTER COLUMN my_json
SET DATA TYPE jsonb
USING my_json::jsonb;