Musíte přejít z db/schema.rb
na db/structure.sql
.
Základní problém je v tom, že schema.rb
je reprezentace struktury databáze tak, jak ji vidí ActiveRecord, ale ActiveRecord nerozumí mnoha věcem (například create type
, ZKONTROLUJTE omezení a další věci, které se zobrazují v execute some_raw_sql
příkazy při migracích), které PostgreSQL dělá. Můžete create type
vše, co chcete, kromě schema.rb
to nikdy neuvidí.
Pokud chcete používat věci, kterým ActiveRecord nerozumí, musíte použít db/structure.sql
pro uložení struktury databáze. structure.sql
ukládá strukturu databáze tak, jak ji databáze rozumí, nikoli tak, jak ji chápe ActiveRecord.
Přepínání je snadné:
- Aktualizujte
config/application.rb
obsahovatconfig.active_record.schema_format = :sql
. - Proveďte
rake db:structure:dump
získat počátečnídb/structure.sql
. - Smažte
db/schema.rb
z vašeho adresářového stromu a kontroly revizí. - Přidejte
db/structure.sql
ke kontrole revizí. - Upravte své rake návyky:
- Použijte
db:structure:dump
místodb:schema:dump
- Použijte
db:structure:load
místodb:schema:load
- Použijte
To znamená, že si nejsem jistý, jak dobře je nativní enum
PostgreSQL typy budou komunikovat s ActiveRecord, jak jsem to nikdy nedělal. enum
AR s
jsou překladem na straně klienta mezi řetězci a celými čísly, ale enum
s
jsou zpracovávány uvnitř databáze a navzájem o sobě nevědí. Může dojít ke konfliktům a budete si muset být jisti, že je budete vzájemně synchronizovat.