U moet overschakelen van db/schema.rb naar db/structure.sql .
Het onderliggende probleem is dat schema.rb is een weergave van de structuur van de database zoals ActiveRecord het ziet, maar ActiveRecord begrijpt veel dingen niet (zoals create type , CHECK-beperkingen en andere dingen die worden weergegeven in execute some_raw_sql statements in migraties) die PostgreSQL doet. U kunt create type alles wat je wilt behalve schema.rb zal het nooit zien.
Als je dingen wilt gebruiken die ActiveRecord niet begrijpt, dan moet je db/structure.sql gebruiken om de structuur van uw database op te slaan. structure.sql slaat de structuur van de database op zoals de database hem begrijpt, niet zoals ActiveRecord hem begrijpt.
Overstappen is eenvoudig:
- Update uw
config/application.rbomconfig.active_record.schema_format = :sqlte bevatten . - Doe een
rake db:structure:dumpom een initiëledb/structure.sql. te krijgen . - Verwijder
db/schema.rbvanuit uw directorystructuur en revisiebeheer. - Voeg
db/structure.sqltoe naar revisiecontrole. - Pas je rake-gewoonten aan:
- Gebruik
db:structure:dumpin plaats vandb:schema:dump - Gebruik
db:structure:loadin plaats vandb:schema:load
- Gebruik
Dat gezegd hebbende, ik weet niet zeker hoe goed PostgreSQL's native enum typen zullen communiceren met ActiveRecord zoals ik het nog nooit heb gedaan. AR's enum s
zijn een client-side vertaling tussen strings en integers, maar PostgreSQL's enum s
worden behandeld in de database en ze weten niets van elkaar. Er kunnen conflicten zijn en u moet ervoor zorgen dat deze met elkaar worden gesynchroniseerd.