테이블 파티셔닝
PostgreSQL의 테이블 파티셔닝이란 무엇인가요?
파티셔닝은 하나의 논리적 테이블을 범위, 목록 또는 해시 기준으로 더 작은 물리적 테이블로 나누므로, 쿼리와 유지 관리 작업이 필요한 파티션만 다루게 됩니다.
선언적 파티셔닝에서는 PARTITION BY로 파티션 테이블을 만든 다음, 각각 키 범위, 값 목록 또는 해시 버킷을 담는 파티션을 추가합니다. 애플리케이션은 부모 테이블을 읽고 쓰며, PostgreSQL이 각 행을 알맞은 파티션으로 보냅니다.
파티션 프루닝을 통해 플래너는 쿼리의 WHERE 절과 일치할 수 없는 파티션을 건너뜁니다. 파티셔닝은 오래된 데이터를 제거하는 비용도 낮춰 줍니다. 파티션을 삭제하거나 분리하는 것이 행을 하나씩 제거하는 것보다 훨씬 빠릅니다. 이러한 이점은 보통 파티셔닝하지 않으면 매우 커질 테이블에서만 나타납니다.
예제
이 예제는 월별 범위 파티션을 만들고 11월의 행에 대해 EXPLAIN으로 확인합니다. 프루닝이 10월 파티션을 건너뛰었기 때문에 출력에는 measurements_2026_11만 나타납니다.
CREATE TABLE measurements (
taken_on date NOT NULL,
value numeric
) PARTITION BY RANGE (taken_on);
CREATE TABLE measurements_2026_10 PARTITION OF measurements
FOR VALUES FROM ('2026-10-01') TO ('2026-11-01');
CREATE TABLE measurements_2026_11 PARTITION OF measurements
FOR VALUES FROM ('2026-11-01') TO ('2026-12-01');
INSERT INTO measurements VALUES ('2026-10-15', 1.5), ('2026-11-02', 2.5);
EXPLAIN SELECT * FROM measurements WHERE taken_on >= '2026-11-01';확장 없이 기본 PostgreSQL 16 또는 17에서 실행되는 일반 SQL입니다. 버려도 되는 빈 데이터베이스에서 실행하세요.
출처
PostgreSQL 공식 문서(영문)입니다.