Работая с Data Explorer, я недавно задумался, для чего нужен параметр «Include query plan» (Включить план запроса). Я включил его, чтобы разобраться, но не заметил никаких изменений.
Тогда я обратился к человеку, у которого за годы работы я многому научился, и он показал скриншот того, как это должно выглядеть. Мне стало интересно, почему у меня это не работает, поэтому я проверил и заметил, что explain: true присутствует в отправляемом запросе[1], но отсутствует в ответе[2]. Я попытался понять, где именно теряется этот параметр. В какой-то момент я обратился к ChatGPT, так как не знал, куда смотреть дальше. Он оказался очень полезен и помог мне пройти весь процесс отладки. Я применил предложенное исправление: добавив explain: opts[:explain], план запроса появился. Хотя признаюсь, что я лишь смутно представлял, что именно делаю. Поэтому я попросил ChatGPT составить резюме наших выводов для отчёта об ошибке[3]:
Резюме ошибки – отсутствие `explain` в результатах запроса (Discourse Data Explorer) ИИ
Проблема:
Поле explain не включалось в JSON-ответ конечной точки /run модуля Data Explorer, даже если в запросе передавалось explain=true. В результате планы запросов не отображались в интерфейсе фронтенда, хотя Postgres возвращал их корректно.
Корневая причина:
Хотя бэкенд корректно передавал opts[:explain] = true в логику выполнения запроса и значение result[:explain] присутствовало, это значение не передавалось дальше в ResultFormatConverter. Метод to_json в ResultFormatConverter включает ключ explain только при условии opts[:explain] == true. Однако этот параметр не был передан в вызов convert.
Исправление:
Добавить explain: opts[:explain] в вызов ResultFormatConverter.convert, как показано ниже:
render json:
ResultFormatConverter.convert(
:json,
result,
query_params: query_params,
download: params[:download],
+ explain: opts[:explain]
)
Результат:
После корректной передачи параметра поле explain включается в JSON-ответ и корректно отображается в интерфейсе фронтенда.


