db/schema.rb
から切り替える必要があります db/structure.sql
へ 。
根本的な問題は、schema.rb
は、ActiveRecordが認識しているデータベースの構造を表していますが、ActiveRecordは多くのことを理解していません(create type
など)。 、CHECK制約、および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
の代わりに
-
とはいえ、PostgreSQLのネイティブのenum
がどれだけうまくいくかはわかりません。 私がやったことがないので、タイプはActiveRecordと相互作用します。 ARのenum
s
は文字列と整数の間のクライアント側の変換ですが、PostgreSQLのenum
s
データベース内で処理され、お互いを知りません。競合が発生する可能性があるため、それらを相互に同期させる必要があります。