immutable 하지 않은 값으로 인한 프루닝 실패

yshjft·2026년 8월 24일

Postgresql

목록 보기
12/12

to_timestamp()의 변동성(Volatility) 특성

to_timestamp()는 내부적으로 현재 세션의 타임존(TimeZone 파라미터) 설정을 참조하여 결과를 반환합니다. 따라서 PostgreSQL 내에서 STABLE 함수로 분류되며, 결코 IMMUTABLE하지 않습니다.

플래너 단계의 Constant-folding 불가

PostgreSQL의 쿼리 플래너는 IMMUTABLE 함수만을 계획 수립(Plan time) 시점에 실행하여 단순 상수로 바꾸는 상수 접기를 수행할 수 있습니다. STABLE 함수는 쿼리 수행 세션이나 환경에 따라 결과가 달라질 수 있으므로, 플래너는 계획을 세울 때 이 값을 상수로 확정 짓지 못합니다.

파티션 프루닝 실패

조건식의 함수가 상수로 확정되지 않았기 때문에, 플래너는 불필요한 자식 테이블을 계획 단계에서 완전히 제외(Pruning)하지 못하고 전부 실행 계획(Append)에 집어넣게 됩니다. 쿼리가 실제로 실행되는 순간 세션 타임존을 기반으로 함수 값이 확정되고 이에 따라 자식 테이블을 모두 스캔하게 됩니다.

profile
꾸준히 나아가자 🐢

0개의 댓글