PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie migriere ich ein ActiveRecord-Modellattribut von json zu jsonb?

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 .