Du måste byta från db/schema.rb
till db/structure.sql
.
Det underliggande problemet är att schema.rb
är en representation av databasens struktur som ActiveRecord ser den men ActiveRecord förstår inte många saker (som create type
, CHECK-begränsningar och andra saker som dyker upp i execute some_raw_sql
uttalanden i migrationer) som PostgreSQL gör. Du kan create type
allt du vill utom schema.rb
kommer aldrig att se det.
Om du vill använda saker som ActiveRecord inte förstår måste du använda db/structure.sql
för att lagra din databas struktur. structure.sql
lagrar databasens struktur som databasen förstår den, inte som ActiveRecord förstår den.
Det är enkelt att byta:
- Uppdatera din
config/application.rb
att innehållaconfig.active_record.schema_format = :sql
. - Gör en
rake db:structure:dump
för att få en initialdb/structure.sql
. - Ta bort
db/schema.rb
från ditt katalogträd och revisionskontroll. - Lägg till
db/structure.sql
till revisionskontroll. - Justera dina rakevanor:
- Använd
db:structure:dump
istället fördb:schema:dump
- Använd
db:structure:load
istället fördb:schema:load
- Använd
Som sagt, jag är inte säker på hur bra PostgreSQL:s ursprungliga enum
typer kommer att interagera med ActiveRecord eftersom jag aldrig har gjort det. AR:s enum
s
är en översättning på klientsidan mellan strängar och heltal men PostgreSQL:s enum
s
hanteras i databasen och de känner inte till varandra. Det kan finnas konflikter och du måste se till att hålla dem synkroniserade med varandra.