Трябва да превключите от db/schema.rb
към db/structure.sql
.
Основният проблем е, че schema.rb
е представяне на структурата на базата данни, както я вижда ActiveRecord, но ActiveRecord не разбира много неща (като create type
, ПРОВЕРКА на ограниченията и други неща, които се показват в execute some_raw_sql
изрази в миграции), които PostgreSQL прави. Можете да create type
всичко, което искате, освен schema.rb
никога няма да го види.
Ако искате да използвате неща, които ActiveRecord не разбира, тогава трябва да използвате db/structure.sql
за съхраняване на структурата на вашата база данни. structure.sql
съхранява структурата на базата данни така, както я разбира базата данни, а не както я разбира ActiveRecord.
Превключването е лесно:
- Актуализирайте своя
config/application.rb
да съдържаconfig.active_record.schema_format = :sql
. - Направете
rake db:structure:dump
за да получите първоначаленdb/structure.sql
. - Изтрийте
db/schema.rb
от вашето дърво на директории и контрол на ревизиите. - Добавете
db/structure.sql
за контрол на ревизиите. - Коригирайте своите рейк навици:
- Използвайте
db:structure:dump
вместоdb:schema:dump
- Използвайте
db:structure:load
вместоdb:schema:load
- Използвайте
Това каза, че не съм сигурен колко добре е собственият enum
на PostgreSQL типове ще взаимодействат с ActiveRecord, както никога не съм го правил. AR на enum
s
са превод от страна на клиента между низове и цели числа, но enum
s
се обработват в базата данни и не знаят един за друг. Възможно е да има конфликти и ще трябва да сте сигурни, че ги поддържате синхронизирани един с друг.