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:
- Aggiorna il tuo
config/application.rb
per contenereconfig.active_record.schema_format = :sql
. - Fai un
rake db:structure:dump
per ottenere undb/structure.sql
iniziale . - Elimina
db/schema.rb
dall'albero delle directory e dal controllo delle revisioni. - Aggiungi
db/structure.sql
al controllo di revisione. - Regola le tue abitudini di rake:
- Usa
db:structure:dump
invece didb:schema:dump
- Usa
db:structure:load
invece didb:schema:load
- Usa
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.