Debe cambiar de db/schema.rb
a db/structure.sql
.
El problema subyacente es que schema.rb
es una representación de la estructura de la base de datos tal como la ve ActiveRecord, pero ActiveRecord no entiende muchas cosas (como create type
, CHECK restricciones y otras cosas que aparecen en execute some_raw_sql
declaraciones en migraciones) que hace PostgreSQL. Puedes create type
todo lo que quieras menos schema.rb
nunca lo verá.
Si desea usar cosas que ActiveRecord no entiende, debe usar db/structure.sql
para almacenar la estructura de su base de datos. structure.sql
almacena la estructura de la base de datos como la entiende la base de datos, no como la entiende ActiveRecord.
Cambiar es fácil:
- Actualice su
config/application.rb
para contenerconfig.active_record.schema_format = :sql
. - Haga un
rake db:structure:dump
para obtener undb/structure.sql
inicial . - Eliminar
db/schema.rb
desde su árbol de directorios y control de revisiones. - Añadir
db/structure.sql
al control de revisiones. - Ajuste sus hábitos de rake:
- Usar
db:structure:dump
en lugar dedb:schema:dump
- Usar
db:structure:load
en lugar dedb:schema:load
- Usar
Dicho esto, no estoy seguro de qué tan bien enum
nativo de PostgreSQL los tipos interactuarán con ActiveRecord como nunca lo he hecho. enum
de AR s
son una traducción del lado del cliente entre cadenas y enteros pero PostgreSQL's enum
s
se manejan dentro de la base de datos y no se conocen entre sí. Puede haber conflictos y deberá asegurarse de mantenerlos sincronizados entre sí.