sql >> データベース >  >> RDS >> PostgreSQL

ActiveRecordとPostgresqlを使用した列挙型

    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が理解するのではなく、データベースが理解するようにデータベースの構造を保存します。

    切り替えは簡単です:

    1. config/application.rbを更新します config.active_record.schema_format = :sqlを含める 。
    2. rake db:structure:dumpを実行します 最初のdb/structure.sqlを取得します 。
    3. db/schema.rbを削除します ディレクトリツリーとリビジョン管理から。
    4. db/structure.sqlを追加します リビジョン管理へ。
    5. 熊手の習慣を調整します:
      • db:structure:dumpを使用します db:schema:dumpの代わりに
      • db:structure:loadを使用します db:schema:loadの代わりに

    とはいえ、PostgreSQLのネイティブのenumがどれだけうまくいくかはわかりません。 私がやったことがないので、タイプはActiveRecordと相互作用します。 ARのenum s は文字列と整数の間のクライアント側の変換ですが、PostgreSQLのenum s データベース内で処理され、お互いを知りません。競合が発生する可能性があるため、それらを相互に同期させる必要があります。




    1. PHPでXMLタグを追加および変更する方法

    2. MYSQL:GROUP BY、LEFT JOIN、WHERE句を含むCOUNTはゼロ値を返しません

    3. mysqlフィールドタイプをINTからVARCHARに変更すると、以前にINTとして保存されたデータにどのように影響しますか

    4. mysql tinyint(1)vs tinyint(2)vs tinyint(3)vs tinyint(4)