sql >> Database >  >> RDS >> PostgreSQL

Opgesomde typen met ActiveRecord en Postgresql

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:

  1. Update uw config/application.rb om config.active_record.schema_format = :sql te bevatten .
  2. Doe een rake db:structure:dump om een ​​initiële db/structure.sql . te krijgen .
  3. Verwijder db/schema.rb vanuit uw directorystructuur en revisiebeheer.
  4. Voeg db/structure.sql toe naar revisiecontrole.
  5. Pas je rake-gewoonten aan:
    • Gebruik db:structure:dump in plaats van db:schema:dump
    • Gebruik db:structure:load in plaats van db:schema:load

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.




  1. Ampersand-operator (&) in een SQL Server WHERE-clausule

  2. Kan niet meerdere MariaDB-query's uitvoeren met PHP

  3. Rails:converteren van MySQL naar PostGres breekt Geokit-afstandsberekeningen?

  4. Wat is de beste manier om oude rijen doorlopend uit MySQL te verwijderen?