Sie müssen von db/schema.rb wechseln zu db/structure.sql .
Das zugrunde liegende Problem ist, dass schema.rb ist eine Darstellung der Datenbankstruktur, wie ActiveRecord sie sieht, aber ActiveRecord versteht viele Dinge nicht (wie create type , CHECK-Einschränkungen und andere Dinge, die in execute some_raw_sql auftauchen Anweisungen in Migrationen), die PostgreSQL tut. Sie können create type alles, was Sie wollen, außer schema.rb nie sehen.
Wenn Sie Dinge verwenden möchten, die ActiveRecord nicht versteht, müssen Sie db/structure.sql verwenden um die Struktur Ihrer Datenbank zu speichern. structure.sql speichert die Struktur der Datenbank so, wie die Datenbank sie versteht, nicht so, wie ActiveRecord sie versteht.
Der Wechsel ist einfach:
- Aktualisieren Sie Ihre
config/application.rbconfig.active_record.schema_format = :sqlenthalten . - Führe einen
rake db:structure:dumpdurch um eine anfänglichedb/structure.sqlzu erhalten . - Löschen Sie
db/schema.rbaus Ihrem Verzeichnisbaum und der Revisionskontrolle. - Fügen Sie
db/structure.sqlhinzu zur Revisionskontrolle. - Passen Sie Ihre Rake-Gewohnheiten an:
- Verwenden Sie
db:structure:dumpstattdb:schema:dump - Verwenden Sie
db:structure:loadstattdb:schema:load
- Verwenden Sie
Allerdings bin ich mir nicht sicher, wie gut die native enum von PostgreSQL ist Typen werden mit ActiveRecord interagieren, wie ich es noch nie getan habe. ARs enum s
sind eine clientseitige Übersetzung zwischen Strings und Ganzzahlen, aber PostgreSQLs enum s
werden innerhalb der Datenbank behandelt und wissen nichts voneinander. Es kann zu Konflikten kommen, und Sie müssen sicherstellen, dass sie miteinander synchronisiert bleiben.