structure.sqlを使いたい!


はじめに

Railsではdb:migrateすると、デフォルトでdb/schema.rbを生成されて、このファイルでスキーマ管理をしてくれます。
しかし、ユニークインデックスにwhereを付けるようなRDB固有の命令については、Rails標準のschema.rbで管理し続けるのは限界があるのではないかという問題点があります。
それを解決してくれるのがstructure.sqlで、SQLでスキーマ情報を管理することも可能です。

structure.sql生成方法

config/application.rbに以下を記述して、rails db:migrateを実行することで生成されます。

config/application.rb
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でスキーマ管理することも増えてきている?っぽいので、どういったものか?ということくらいは掴んでおいた方がいいかもしれないですね!