Data Explorer에 쿼리 플랜이 없습니다

데이터 탐색기를 사용하던 중 'Include query plan’이 어떤 용도인지 궁금해졌습니다. 그래서 활성화해 보았지만, 어떤 변화가 있는지 알아차리지 못했습니다.

그래서 지난 몇 년간 많은 것을 배운 분께 여쭤보았는데, 해당 기능이 정상적으로 작동할 때의 스크린샷을 공유해 주셨습니다. 왜 작동하지 않는지 궁금해서 확인해 보니, 요청에 explain: true가 포함되었지만[1], 응답에는 포함되지 않는 것을 발견했습니다[2]. 그래서 어디서 유실되었는지 이해하려고 노력했습니다. 다음에 어디를 봐야 할지 확신이 서지 않아 어느 시점에는 ChatGPT에게 도움을 청했습니다. 매우 유용했고, 전체 디버깅 과정을 함께해 주었습니다. explain: opts[:explain]을 추가한 후 수정 사항을 시도해 보니 쿼리 플랜이 표시되었습니다. 다만, 제가 무엇을 하고 있는지 막연한 정도밖에 이해하지 못하고 있다는 점은 인정해야 합니다. 그래서 버그 리포트용 발견 사항 요약을 ChatGPT에게 작성해 달라고 요청했습니다[3]:

버그 요약 – 쿼리 결과에서 `explain` 누락 (Discourse Data Explorer) AI

문제:
요청에 explain=true가 전달되었음에도 불구하고, Data Explorer의 /run 엔드포인트 JSON 응답에 explain 필드가 포함되지 않았습니다. 그 결과 Postgres가 쿼리 플랜을 올바르게 반환했음에도 프론트엔드 UI에서 쿼리 플랜을 볼 수 없었습니다.

원인:
백엔드는 쿼리 실행 로직에 opts[:explain] = true를 올바르게 전달했고 result[:explain] 값도 존재했지만, 이 값이 ResultFormatConverter로 전달되지 않았습니다. ResultFormatConverter의 to_json 메서드는 opts[:explain] == true일 때만 explain 키를 포함합니다. 그러나 이 옵션이 convert 호출에 포함되지 않았습니다.

수정 방법:
다음과 같이 ResultFormatConverter.convert 호출에 explain: opts[:explain]을 추가하십시오:

render json: 
         ResultFormatConverter.convert(
           :json,
           result,
           query_params: query_params,
           download: params[:download],
+          explain: opts[:explain]
         )

결과:
올바르게 전달되면 explain 필드가 JSON 응답에 포함되고 프론트엔드 UI에 올바르게 렌더링됩니다.




  1. ↩︎



  2. ↩︎

  3. GitHub 링크를 추가하고 코드 스니펫을 포맷팅함 ↩︎

3개의 좋아요

문제를 찾아내서 잘하셨네요!
FEATURE: Allows CSV file result to be attached in automated PMs (#318) · discourse/discourse-data-explorer@cbae98f · GitHub 커밋에서 발생한 회귀 문제(regression)인 것 같습니다.
코드가 리팩터링되었지만, explain 매개변수가 누락되었습니다.

2개의 좋아요

이 문제를 보고해 주셔서 감사합니다. 해당 문제는 이 PR에서 수정되었습니다:

6개의 좋아요