はじめに
Railsではdb:migrateすると、デフォルトでdb/schema.rbを生成されて、このファイルでスキーマ管理をしてくれます。
しかし、ユニークインデックスにwhereを付けるようなRDB固有の命令については、Rails標準のschema.rbで管理し続けるのは限界があるのではないかという問題点があります。
それを解決してくれるのがstructure.sql
で、SQLでスキーマ情報を管理することも可能です。
structure.sql生成方法
config/application.rb
に以下を記述して、rails db:migrate
を実行することで生成されます。
config.active_record.schema_format = :sql # デフォルトでは「:ruby」となっています
structure.sqlをロードする
生成されたstructure.sqlファイルは、下記のコマンドでデータベースへロードできます。
$ rails db:structure:load
SQLファイルだけ欲しい場合
SQLダンプファイルのみが欲しい場合は、下記コマンドでstructure.sqlのみを生成することができます。
$ rails db:structure:dump
注意点
migrationファイルに基づいてstructure.sqlは更新されていくので、中身を変更したい時は手動では無くrails db:migrate:reset
などでmigrationを実行し直す。
終わりに
最近では、structure.sqlでスキーマ管理することも増えてきている?っぽいので、どういったものか?ということくらいは掴んでおいた方がいいかもしれないですね!