Cuando ejecuto consultas (por ejemplo, MyModel.where(...)
o record.associated_things
) en la consola, ¿cómo puedo ver las consultas reales de la base de datos que se están ejecutando para poder comprender mejor lo que está sucediendo?
Cuando ejecuto consultas (por ejemplo, MyModel.where(...)
o record.associated_things
) en la consola, ¿cómo puedo ver las consultas reales de la base de datos que se están ejecutando para poder comprender mejor lo que está sucediendo?
Respuestas:
Ingrese esta línea en la consola:
ActiveRecord::Base.logger = Logger.new(STDOUT)
Ingrese esta línea en la consola:
ActiveRecord::Base.connection.instance_variable_set :@logger, Logger.new(STDOUT)
ActiveRecord::Base.logger = nil
Existe el .explain
método en Rails 4.
( .to_sql
también funciona, pero no muestra las inclusiones)
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
voluntad para hacer el trabajo y no .to_sql
. Y .explain
todavía no proporciona una consulta SQL en formato sin procesar que pueda ejecutar en la consola pg. Pero necesitaba la consulta en bruto para explicar y analizar. Supongo que tendrá que ver con explicarlo por ahora.
Recientemente, puede usar esto:
https://github.com/dejan/rails_panel
Consiste en un complemento del panel de la consola del desarrollador para Chrome y un archivo de gema que debe agregarse al Gemfile de su aplicación de esta manera:
group :development do
gem 'meta_request'
end
Luego corre de nuevo:
bundle install
Reinicie su aplicación, ábrala e inicie la consola de desarrollador, y debería verla así:
A partir de Rails 6, existe un enfoque más conveniente: simplemente agregue la ActiveRecord::Base.verbose_query_logs = true
consola y verá todas las llamadas SQL y los lugares donde se llamó. Más información https://guides.rubyonrails.org/debugging_rails_applications.html#verbose-query-logs