PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Tipi enumerati con ActiveRecord e Postgresql

Devi passare da db/schema.rb a db/structure.sql .

Il problema di fondo è che schema.rb è una rappresentazione della struttura del database come la vede ActiveRecord ma ActiveRecord non comprende molte cose (come create type , CHECK vincoli e altre cose che appaiono in execute some_raw_sql istruzioni nelle migrazioni) che fa PostgreSQL. Puoi create type tutto quello che vuoi tranne schema.rb non lo vedrà mai.

Se vuoi usare cose che ActiveRecord non capisce, devi usare db/structure.sql per memorizzare la struttura del database. structure.sql memorizza la struttura del database così come la comprende il database, non come la comprende ActiveRecord.

Cambiare è facile:

  1. Aggiorna il tuo config/application.rb per contenere config.active_record.schema_format = :sql .
  2. Fai un rake db:structure:dump per ottenere un db/structure.sql iniziale .
  3. Elimina db/schema.rb dall'albero delle directory e dal controllo delle revisioni.
  4. Aggiungi db/structure.sql al controllo di revisione.
  5. Regola le tue abitudini di rake:
    • Usa db:structure:dump invece di db:schema:dump
    • Usa db:structure:load invece di db:schema:load

Detto questo, non sono sicuro di quanto bene sia il enum nativo di PostgreSQL i tipi interagiranno con ActiveRecord come non l'ho mai fatto. enum di AR s sono una traduzione lato client tra stringhe e interi ma enum s sono gestiti all'interno del database e non si conoscono. Potrebbero esserci conflitti e dovrai assicurarti di mantenerli sincronizzati tra loro.