Railsコンソール内で特定のテーブルに設定しているインデックスを確認したいと思ったのでやり方をまとめます。
目次
問題
DBにインデックスが正しく貼られているか確認したかったです。
業務ではDockerを使っていますが、わざわざMySQLコンテナに入るのも面倒だなと思い、Railsコンソール内で特定のテーブルに貼られているインデックスを確認する方法を探していました。
解決方法
結論として、Railsコンソール内で以下を実行してもらえれば、指定したテーブルのインデックスが表示されます。
ApplicationRecord.connection.indexes("table_name").each do |t|
p t.columns
end
もし確認したいモデルファイルがApplicationRecord
ではなくActiveRecord::Base
クラスを継承している場合、以下のように書けばOKです。
# ApplicationRecord を ActiveRecord::Baseに書き換える
ActiveRecord::Base.connection.indexes("table_name").each do |t|
p t.columns
end
Rails5以降はApplicationRecord
で、それ以前はActiveRecord::Base
クラスを継承しているはずです。
ぼくの職場では、Rails4時代からバージョンアップを続けて現在はRails6.1なのですが、諸事情によりモデルファイルの継承元をApplicationRecord
にすると問題が発生するため、今でもActiveRecord::Base
が基底クラスとなっています。
おわりに
まあ実際にはRailsコンテナに入るのとDBコンテナに入るのでは対して手間は変わらないですね。
コメント