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.rbpour contenirconfig.active_record.schema_format = :sql. - Faire un
rake db:structure:dumppour obtenir undb/structure.sqlinitial . - Supprimez
db/schema.rbà partir de votre arborescence de répertoires et de votre contrôle de révision. - Ajouter
db/structure.sqlau contrôle des révisions. - Ajustez vos habitudes de rake :
- Utilisez
db:structure:dumpau lieu dedb:schema:dump - Utilisez
db:structure:loadau 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.