본문 바로가기

DB/PostgreSQL

[ PostgreSQL ] 테이블에 파티셔닝 기능 추가하기

반응형

🌱Partitioning이란?

PostgreSQL에서 파티셔닝(partitioning)은 대용량 테이블을 효율적으로 관리하고 성능을 향상시키기 위한 기능입니다. 기본적으로 하나의 큰 테이블을 여러 개의 작은 테이블(파티션)으로 나누는 방식입니다.

PostgreSQL에서는 PostgreSQL 10부터 native partitioning을 지원합니다. 주요 파티셔닝 방법은 다음과 같습니다:


 

 

1. 파티셔닝 방법 종류

  1. Range Partitioning (범위 기반)
    • 예: 날짜, ID 범위 등으로 나눔
  2. List Partitioning (리스트 기반)
    • 예: 지역 코드, 카테고리 등 특정 값 기반으로 나눔
  3. Hash Partitioning (해시 기반)
    • 균등 분산이 필요할 때 사용
  4. Composite Partitioning (복합: Range + List 등)

 

 

2. 기본 사용법 예제

1. Range Partitioning 예제 (날짜 기준)

CREATE TABLE orders (
    id serial,
    order_date date,
    amount numeric
) PARTITION BY RANGE (order_date);

파티션 테이블 생성

CREATE TABLE orders_2023 PARTITION OF orders
    FOR VALUES FROM ('2023-01-01') TO ('2024-01-01');

CREATE TABLE orders_2024 PARTITION OF orders
    FOR VALUES FROM ('2024-01-01') TO ('2025-01-01');

2. List Partitioning 예제 (지역 코드 기준)

CREATE TABLE users (
    id serial,
    region text
) PARTITION BY LIST (region);

파티션 테이블 생성

CREATE TABLE users_korea PARTITION OF users
    FOR VALUES IN ('KR');

CREATE TABLE users_japan PARTITION OF users
    FOR VALUES IN ('JP');

3. Hash Partitioning 예제

CREATE TABLE logs (
    id serial,
    message text
) PARTITION BY HASH (id);

파티션 테이블 생성

CREATE TABLE logs_p0 PARTITION OF logs FOR VALUES WITH (MODULUS 4, REMAINDER 0);
CREATE TABLE logs_p1 PARTITION OF logs FOR VALUES WITH (MODULUS 4, REMAINDER 1);
CREATE TABLE logs_p2 PARTITION OF logs FOR VALUES WITH (MODULUS 4, REMAINDER 2);
CREATE TABLE logs_p3 PARTITION OF logs FOR VALUES WITH (MODULUS 4, REMAINDER 3);

 

 

3. 기타 참고 사항

  • 파티셔닝 키는 반드시 테이블 생성 시 지정해야 합니다.
  • 각 파티션은 실제 테이블처럼 작동하지만, 부모 테이블로 쿼리하면 자동으로 적절한 파티션을 검색합니다.
  • 인덱스나 제약조건은 각 파티션에 별도로 걸어줘야 합니다.
  • 파티션은 자동 생성되지 않기 때문에, 새로운 값이 생길 경우 파티션을 수동으로 추가해야 합니다.

반응형