개발/POSTGRESQL
POSTGRESQL GENERATE_SERIES DATE 실행계획 문제
큐토
2021. 8. 27. 18:11
날짜 connect by 할 때
SELECT TO_CHAR(I::DATE, 'YYYYMMDD') AS DAY
FROM GENERATE_SERIES( TO_DATE(REGEXP_REPLACE(#{startDt}, '\D','','g'), 'YYYYMMDD')
, TO_DATE(REGEXP_REPLACE(#{endDt}, '\D','','g'), 'YYYYMMDD'), '1 DAY'::INTERVAL) I
흔히 이렇게 쓰는데 문제는 실행계획에서 기간이 짧은데도 불구하고 1000 rows로 고정됨.
SELECT TO_CHAR(#{startDt}::timestamp + make_interval(days => I), 'YYYY-MM-DD') AS DAY
FROM GENERATE_SERIES(0, DATE_PART('day', #{endDt}::timestamp - #{startDt}::timestamp)::integer) I
이런식으로 자료형을 바꿔서 응용하면 정상적인 실행계획을 출력할 수 있다.