sql >> Database >  >> RDS >> PostgreSQL

Hoe migreer ik een ActiveRecord-modelkenmerk van json naar jsonb?

Ik zou de migratie op deze manier schrijven:

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

Ik weet niet hoe dit zich qua prestaties verhoudt tot andere oplossingen, maar ik heb dit getest op een tafel met 120.000 records, waarbij elk record vier json heeft. kolommen en het kostte me ongeveer een minuut om die tabel te migreren. Natuurlijk, ik denk dat het afhangt van hoe complex de json structuur is.

Merk ook op dat als uw bestaande records een standaardwaarde hebben van {} , moet u toevoegen aan de bovenstaande verklaringen default: {} , want anders heb je jsonb kolommen, maar de standaardwaarde blijft '{}'::json .




  1. Controleer op geldige SQL-kolomnaam

  2. Ophalen en wijzigen van de SQL die wordt gebruikt in een MySQL-weergave voor heruitvoering

  3. UNIQUE implementeren in gekoppelde tabellen in MySQL

  4. PostgreSQL-kolomwaarden moeten in een reeks staan