프로젝트/악취 포집기 앱

PRIMARY KEY 미포함 컬럼 파티셔닝 오류

yoon4360 2025. 4. 1. 23:34

 

파티셔닝할 때 외래키 제약조건 외에 조심해야할 부분이 여기 하나 더 있다.

 

문제 정의

reg_date 컬럼을 기준으로 alarm_data 테이블에 파티셔닝을 적용하려 했으나, 다음과 같은 오류가 발생했다.

ERROR 1503: A PRIMARY KEY must include all columns in the table's partitioning function

 

이는 파티셔닝에 사용되는 컬럼이 기본 키에 포함되어야 함을 의미한다.

 


 

시도했던 방법

  • 기존 기본 키 유지한 채 파티셔닝 시도: 기존의 기본 키(ad_idx)를 유지하면서 reg_date를 기준으로 파티셔닝을 적용하려 했으나, 위와 동일한 오류가 발생했다.
  • 기본 키 수정: 기본 키에 reg_date 컬럼을 추가하여 (ad_idx, reg_date) 형태로 변경한 후 파티셔닝을 적용했다.

 


 

해결 방법

기본 키를 (ad_idx, reg_date)로 수정한 후, reg_date를 기준으로 파티셔닝을 적용하여 문제를 해결했다.

-- 기존 PRIMARY KEY가 ad_idx만 포함되어 있다면,
-- 파티셔닝 기준인 reg_date를 포함한 복합 PK로 변경
ALTER TABLE alarm_data DROP PRIMARY KEY,
ADD PRIMARY KEY (ad_idx, reg_date);

-- 이후 파티셔닝 정상 적용 가능
ALTER TABLE alarm_data
PARTITION BY RANGE (YEAR(reg_date)) (
    PARTITION p0 VALUES LESS THAN (2024),
    PARTITION p1 VALUES LESS THAN (2025),
    PARTITION p2 VALUES LESS THAN (2026),
    PARTITION p3 VALUES LESS THAN MAXVALUE
);

 


 

마무리

파티션은 MySQL 입장에서 데이터를 어떤 파티션에 넣을지 결정하는 기준 컬럼이 필요하다.

이 컬럼이 고유해야 데이터 정합성을 유지할 수 있기에 파티셔닝 키가 반드시 기본키에 포함되어야 한다.

 

 

 

'프로젝트 > 악취 포집기 앱' 카테고리의 다른 글

DB 마이그레이션 적용  (0) 2025.04.01
MySQL 파티셔닝과 외래 키 제약의 충돌  (0) 2025.04.01
MySQL 성능 최적화  (0) 2025.04.01