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.rbat indeholdeconfig.active_record.schema_format = :sql. - Foretag en
rake db:structure:dumpfor at få en indledendedb/structure.sql. - Slet
db/schema.rbfra dit bibliotekstræ og revisionskontrol. - Tilføj
db/structure.sqltil revisionskontrol. - Juster dine rake-vaner:
- Brug
db:structure:dumpi stedet fordb:schema:dump - Brug
db:structure:loadi 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.