Você precisa mudar de
db/schema.rb
para db/structure.sql
. O problema subjacente é que
schema.rb
éuma representação da estrutura da base de dados tal como o ActiveRecord a vê mas o ActiveRecord não compreende muitas coisas (como create type
, CHECK restrições e outras coisas que aparecem em execute some_raw_sql
instruções em migrações) que o PostgreSQL faz. Você pode create type
tudo o que você quer, mas schema.rb
nunca vai ver. Se você quiser usar coisas que o ActiveRecord não entende, você deve usar
db/structure.sql
para armazenar a estrutura do seu banco de dados. structure.sql
armazena a estrutura do banco de dados como o banco de dados a entende, não como o ActiveRecord a entende. A comutação é fácil:
- Atualize seu
config/application.rb
para conterconfig.active_record.schema_format = :sql
. - Faça um
rake db:structure:dump
para obter umdb/structure.sql
inicial . - Excluir
db/schema.rb
da sua árvore de diretórios e controle de revisão. - Adicionar
db/structure.sql
ao controle de revisão. - Ajuste seus hábitos de rake:
- Usar
db:structure:dump
em vez dedb:schema:dump
- Usar
db:structure:load
em vez dedb:schema:load
- Usar
Dito isso, não tenho certeza de quão bem o
enum
nativo do PostgreSQL tipos irão interagir com o ActiveRecord como eu nunca fiz. enum
do AR s
são uma tradução do lado do cliente entre strings e inteiros, mas enum
s
são tratados dentro do banco de dados e eles não sabem um do outro. Pode haver conflitos e você precisará mantê-los sincronizados entre si.