Du skal skifte fra db/schema.rb
til db/structure.sql
.
Det underliggende problem er, at schema.rb
er en repræsentation af databasens struktur, som ActiveRecord ser den, men ActiveRecord forstår ikke mange ting (såsom create type
, CHECK begrænsninger og andre ting, der dukker op i execute some_raw_sql
udsagn i migrationer), som PostgreSQL gør. Du kan create type
alt hvad du vil, undtagen schema.rb
vil aldrig se det.
Hvis du vil bruge ting, som ActiveRecord ikke forstår, skal du bruge db/structure.sql
for at gemme din databases struktur. structure.sql
gemmer databasens struktur, som databasen forstår den, ikke som ActiveRecord forstår den.
Det er nemt at skifte:
- Opdater din
config/application.rb
at indeholdeconfig.active_record.schema_format = :sql
. - Foretag en
rake db:structure:dump
for at få en indledendedb/structure.sql
. - Slet
db/schema.rb
fra dit bibliotekstræ og revisionskontrol. - Tilføj
db/structure.sql
til revisionskontrol. - Juster dine rake-vaner:
- Brug
db:structure:dump
i stedet fordb:schema:dump
- Brug
db:structure:load
i stedet fordb:schema:load
- Brug
Når det er sagt, er jeg ikke sikker på, hvor godt PostgreSQL's oprindelige enum
typer vil interagere med ActiveRecord, da jeg aldrig har gjort det. AR's enum
s
er en oversættelse på klientsiden mellem strenge og heltal, men PostgreSQL's enum
s
håndteres inde i databasen, og de kender ikke til hinanden. Der kan være konflikter, og du skal sørge for at holde dem synkroniseret med hinanden.