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.rb
config.active_record.schema_format = :sql
enthalten . - Führe einen
rake db:structure:dump
durch um eine anfänglichedb/structure.sql
zu erhalten . - Löschen Sie
db/schema.rb
aus Ihrem Verzeichnisbaum und der Revisionskontrolle. - Fügen Sie
db/structure.sql
hinzu zur Revisionskontrolle. - Passen Sie Ihre Rake-Gewohnheiten an:
- Verwenden Sie
db:structure:dump
stattdb:schema:dump
- Verwenden Sie
db:structure:load
stattdb: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.