Ich würde die Migration so schreiben:
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
Ich weiß nicht, wie dies leistungsmäßig mit anderen Lösungen verglichen wird, aber ich habe dies an einer Tabelle mit 120.000 Datensätzen getestet, wobei jeder Datensatz vier json
hat Spalten und ich brauchte ungefähr eine Minute, um diese Tabelle zu migrieren. Natürlich denke ich, dass es davon abhängt, wie komplex der json
ist Struktur ist.
Beachten Sie auch, dass, wenn Ihre vorhandenen Datensätze einen Standardwert von {}
haben , müssen Sie zu den obigen Anweisungen default: {}
hinzufügen , weil Sie sonst jsonb
haben Spalten, aber der Standardwert bleibt '{}'::json
.