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.rb
omconfig.active_record.schema_format = :sql
te bevatten . - Doe een
rake db:structure:dump
om een initiëledb/structure.sql
. te krijgen . - Verwijder
db/schema.rb
vanuit uw directorystructuur en revisiebeheer. - Voeg
db/structure.sql
toe naar revisiecontrole. - Pas je rake-gewoonten aan:
- Gebruik
db:structure:dump
in plaats vandb:schema:dump
- Gebruik
db:structure:load
in 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.