Трябва да превключите от 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
се обработват в базата данни и не знаят един за друг. Възможно е да има конфликти и ще трябва да сте сигурни, че ги поддържате синхронизирани един с друг.