Kiedy uruchamiam zapytania (np. MyModel.where(...)
Lub record.associated_things
) w konsoli, jak mogę zobaczyć rzeczywiste zapytania do bazy danych, aby lepiej zrozumieć, co się dzieje?
Kiedy uruchamiam zapytania (np. MyModel.where(...)
Lub record.associated_things
) w konsoli, jak mogę zobaczyć rzeczywiste zapytania do bazy danych, aby lepiej zrozumieć, co się dzieje?
Odpowiedzi:
Wpisz ten wiersz w konsoli:
ActiveRecord::Base.logger = Logger.new(STDOUT)
Wpisz ten wiersz w konsoli:
ActiveRecord::Base.connection.instance_variable_set :@logger, Logger.new(STDOUT)
ActiveRecord::Base.logger = nil
Jest .explain
metoda w Railsach 4.
( .to_sql
działa też, ale nie pokazuje dołączeń)
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
testamentu, a nie .to_sql
. I .explain
nadal nie zapewnia zapytania sql w formacie surowym, które mogę uruchomić w konsoli pg. Ale potrzebowałem surowego zapytania, aby wyjaśnić i przeanalizować. Myślę, że na razie trzeba będzie wyjaśnić.
Od niedawna możesz tego używać:
https://github.com/dejan/rails_panel
Składa się z dodatku panelu konsoli programisty dla Chrome i pliku gem, który należy dodać do pliku Gemfile aplikacji w następujący sposób :
group :development do
gem 'meta_request'
end
Następnie uruchom ponownie:
bundle install
Uruchom ponownie aplikację, otwórz ją i uruchom konsolę programisty, a powinieneś zobaczyć to tak:
Począwszy od Rails 6 jest wygodniejsze podejście: po prostu dodaj ActiveRecord::Base.verbose_query_logs = true
w konsoli, a zobaczysz wszystkie wywołania SQL i miejsca, w których został wywołany. Więcej informacji https://guides.rubyonrails.org/debugging_rails_applications.html#verbose-query-logs