초보다 정밀한 단위에 대한 `EXTRACT` 명령이 postgres와 다르게 동작함(CockroachDB issue #40683)
개요
이번에는 간단하게 해결할 수 있는 이슈를 수정했습니다. 이 정도의 이슈는 처음 스프린트에 참여하는 분도 해결할 수 있을 것으로 기대합니다.
이슈 파악 및 수정
친절하게도 이슈를 제보하신 분께서 다음과 같이 PostgreSQL과 카크로치디비의 결과 차이를 보여주는 예를 추가해주셨습니다:
PostgreSQL:
=# select current_timestamp, extract(microseconds from current_timestamp);
current_timestamp | date_part
-------------------------------+-----------
2019-09-11 18:03:45.553972+00 | 45553972
카크로치디비:
> select current_timestamp, extract(microseconds from current_timestamp);
current_timestamp | extract
+----------------------------------+---------+
2019-09-11 18:03:35.056128+00:00 | 56128
해당 명령어 구현이 builtins.go에 있다는 것을 알았고, 코드를 살펴본 결과 초보다 정밀한 단위에 대해 EXTRACT
명령어를 사용했을 때 초 부분이 무시되는 것을 발견해 PR을 만들었습니다.
흥미로운 점
수정 자체는 큰 내용이 아니었지만, 릴리즈 반영에 대한 의사결정 과정이 흥미로웠습니다. 이것이 버그 수정인지, sql 변경인지에 관한 토론이 진행되었는데, 다음 댓글에 의해 현재 버전(19.1) 보다 두 버전 뒤인 20.1에 반영되게 되었습니다.
이것은 스펙과 다르다는 점에서 버그 수정이지만, 우리가 의도한 대로 정확하게 동작합니다.
EXTRACT
에 의존하는 애플리케이션을 중단시킬 수 있는 대규모 동작 변경을 겪습니다. 이런 이유로 나는 그것을 19.1에 반영하면 안 된다고 생각합니다. 19.2는 아직 배포되지 않았기 때문에 가능할 수도 있습니다. 또 20.1까지 기다리는 것도 조금 검토 중입니다.