Als ich den Daten-Explorer benutzte, fragte ich mich kürzlich, wozu die Option „Include query plan“ dient. Also habe ich sie aktiviert, um es herauszufinden – aber ich habe keine Veränderung bemerkt.
Also fragte ich jemanden, von dem ich über die Jahre viel gelernt habe, und er teilte einen Screenshot, wie es aussehen sollte. Ich war neugierig, warum es nicht funktionierte, also überprüfte ich und bemerkte, dass explain: true in der gesendeten Anfrage enthalten ist[1], aber nicht in der Antwort enthalten ist[2]. Also versuchte ich zu verstehen, wo es verloren ging. Irgendwann fragte ich ChatGPT, weil ich nicht sicher war, wo ich als Nächstes suchen sollte. Es war sehr hilfreich und führte mich durch das gesamte Debugging. Ich habe die Korrektur ausprobiert, nachdem ich explain: opts[:explain] hinzugefügt hatte, erschien der Query Plan. Ich muss jedoch zugeben, dass ich nur eine vage Vorstellung davon hatte, was ich tat. Deshalb bat ich ChatGPT, eine Zusammenfassung unserer Ergebnisse für den Bug-Report zu schreiben[3]:
Bug Summary – Missing `explain` in Query Results (Discourse Data Explorer) AI
Issue:
Das Feld explain wurde nicht in die JSON-Antwort des Data Explorer /run-Endpunkts aufgenommen, selbst wenn explain=true in der Anfrage übergeben wurde. Infolgedessen waren die Query-Pläne in der Frontend-Benutzeroberfläche nicht sichtbar, obwohl Postgres sie korrekt zurückgab.
Root Cause:
Während das Backend opts[:explain] = true korrekt in die Query-Ausführungslogik übergab und der Wert result[:explain] vorhanden war, wurde dieser Wert nicht an den ResultFormatConverter weitergeleitet. Die to_json-Methode in ResultFormatConverter schließt den Schlüssel explain nur ein, wenn opts[:explain] == true. Diese Option war jedoch nicht im convert-Aufruf enthalten.
Fix:
Fügen Sie explain: opts[:explain] zum Aufruf von ResultFormatConverter.convert hinzu, wie folgt:
render json:
ResultFormatConverter.convert(
:json,
result,
query_params: query_params,
download: params[:download],
+ explain: opts[:explain]
)
Result:
Sobald es korrekt übergeben wird, ist das Feld explain in der JSON-Antwort enthalten und wird ordnungsgemäß in der Frontend-Benutzeroberfläche gerendert.


