【Rails】Railsコンソールでテーブルのインデックスを確認する

Railsコンソール内で特定のテーブルに設定しているインデックスを確認したいと思ったのでやり方をまとめます。

バージョン
  • Ruby 3.0.3
  • Rails 6.1.6.1
目次

問題

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コンテナに入るのでは対して手間は変わらないですね。

参考文献
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

28歳 | 文系卒▶︎金融営業▶︎SESでテスター▶︎26歳の時に独学で転職しRubyエンジニア▶︎現在はGoエンジニア | 技術オタクじゃないけど気合と根性と成長意欲でガリ勉できるタイプ | インフラのわかるバックエンドエンジニアになりたい。

コメント

コメントする


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

目次