Vous devez passer de db/schema.rb
vers db/structure.sql
.
Le problème sous-jacent est que schema.rb
est une représentation de la structure de la base de données telle qu'ActiveRecord la voit mais ActiveRecord ne comprend pas beaucoup de choses (comme create type
, les contraintes CHECK et d'autres choses qui apparaissent dans execute some_raw_sql
instructions dans les migrations) que PostgreSQL fait. Vous pouvez create type
tout ce que vous voulez sauf schema.rb
ne le verra jamais.
Si vous voulez utiliser des choses qu'ActiveRecord ne comprend pas, vous devez utiliser db/structure.sql
pour stocker la structure de votre base de données. structure.sql
stocke la structure de la base de données telle que la base de données la comprend, et non telle qu'ActiveRecord la comprend.
Le changement est facile :
- Mettre à jour votre
config/application.rb
pour contenirconfig.active_record.schema_format = :sql
. - Faire un
rake db:structure:dump
pour obtenir undb/structure.sql
initial . - Supprimez
db/schema.rb
à partir de votre arborescence de répertoires et de votre contrôle de révision. - Ajouter
db/structure.sql
au contrôle des révisions. - Ajustez vos habitudes de rake :
- Utilisez
db:structure:dump
au lieu dedb:schema:dump
- Utilisez
db:structure:load
au lieu dedb:schema:load
- Utilisez
Cela dit, je ne sais pas à quel point le enum
natif de PostgreSQL les types interagiront avec ActiveRecord comme je ne l'ai jamais fait. enum
d'AR s
sont une traduction côté client entre des chaînes et des entiers mais le enum
s
sont gérés à l'intérieur de la base de données et ils ne se connaissent pas. Il pourrait y avoir des conflits et vous devrez vous assurer de les garder synchronisés les uns avec les autres.