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
データベース内で処理され、お互いを知りません。競合が発生する可能性があるため、それらを相互に同期させる必要があります。