Quando executo consultas (por exemplo, MyModel.where(...)
ou record.associated_things
) no console, como posso ver as consultas reais do banco de dados sendo executadas para obter mais compreensão do que está acontecendo?
Quando executo consultas (por exemplo, MyModel.where(...)
ou record.associated_things
) no console, como posso ver as consultas reais do banco de dados sendo executadas para obter mais compreensão do que está acontecendo?
Respostas:
Insira esta linha no console:
ActiveRecord::Base.logger = Logger.new(STDOUT)
Insira esta linha no console:
ActiveRecord::Base.connection.instance_variable_set :@logger, Logger.new(STDOUT)
ActiveRecord::Base.logger = nil
Existe o .explain
método no Rails 4.
( .to_sql
funciona também, mas não mostra inclui)
Category.includes(:products).explain
=> EXPLAIN for: SELECT "categories".* FROM "categories" 0|0|0|SCAN TABLE categories
EXPLAIN for: SELECT "categories_products".* FROM "categories_products" WHERE "categories_products"."category_id" IN (1, 2) 0|0|0|SCAN TABLE categories_products
EXPLAIN for: SELECT "products".* FROM "products" WHERE "products"."id" IN (1, 2, 3, 4, 5, 6, 7) 0|0|0|SEARCH TABLE products USING INTEGER PRIMARY KEY (rowid=?) 0|0|0|EXECUTE LIST SUBQUERY 1
.explain
vontade do trabalho e não .to_sql
. E .explain
ainda não fornece consulta sql em formato raw que posso rodar no console pg. Mas eu precisava da consulta bruta para explicar e analisar. Eu acho que vai ter a ver com explicar por enquanto.
Recentemente, você pode usar isto:
https://github.com/dejan/rails_panel
Ele consiste em um complemento do painel do console do desenvolvedor para cromo e um arquivo gem que precisa ser adicionado ao Gemfile do seu aplicativo como este:
group :development do
gem 'meta_request'
end
Em seguida, execute novamente:
bundle install
Reinicie seu aplicativo, abra-o e inicie o console do desenvolvedor, e você deve vê-lo assim:
A partir do Rails 6, há uma abordagem mais conveniente: simplesmente adicione ActiveRecord::Base.verbose_query_logs = true
no console e você verá todas as chamadas SQL e locais onde foi chamado. Mais informações https://guides.rubyonrails.org/debugging_rails_applications.html#verbose-query-logs