파티션 테이블 생성
1
2
3
4
5
6
7
8
9
10
11
12
13
|
CREATE TABLE res_op_logs
(
project_id character varying(128) NOT NULL,
object_id character varying(128) NOT NULL,
object_type character varying(10) NOT NULL,
crt_date date NOT NULL default current_date,
log_type character varying(10),
log_data text,
reg_date timestamp without time zone DEFAULT CURRENT_TIMESTAMP
) PARTITION BY RANGE (crt_date);
CREATE UNIQUE INDEX res_op_logs_idx_01 ON res_op_logs
( project_id,object_id,object_type,crt_date );
|
cs |
새 파티션의 값이 하나 이상의 기존 파티션에 있는 값과 겹치도록 경계를 지정하면 오류가 발생한다. 이렇게 생성된 파티션은 모든 방법으로 일반적인 PostgreSQL 테이블이다. 각 파티션에 대한 테이블 스페이스 및 스토리지 매개 변수를 개별적으로 지정할 수 있다.
위의 예제의 경우 각 파티션은 한 번에 1년의 데이터를 삭제해야 하는 요구 사항과 일치하도록 테이블 생성 쿼리는 다음과 같다.
1
2
3
4
5
6
7
8
|
CREATE TABLE res_op_logs_y2021 PARTITION OF res_op_logs
FOR VALUES FROM ('2021-01-01') TO ('2021-12-31');
CREATE TABLE res_op_logs_y2022 PARTITION OF res_op_logs
FOR VALUES FROM ('2022-01-01') TO ('2022-12-31');
CREATE TABLE res_op_logs_y2023 PARTITION OF res_op_logs
FOR VALUES FROM ('2023-01-01') TO ('2023-12-31');
|
cs |
생성후 테이블의 구조. 해당 테이블의 하위에 파티션으로 생성한 테이블이 위치한다.
실습
1
2
3
|
insert into res_op_logs values (1,1,'type', date('2021-06-30'), 'info', CURRENT_TIMESTAMP);
select * from res_op_logs;
|
cs |
1
|
select * from res_op_logs_y2021;
|
cs |
부모테이블과 파티셔닝된 테이블들에서 조회할 수 있다.
하지만 파티션이 없는 데이터를 입력하고자 하면 오류가 발생한다.
1
|
insert into res_op_logs values (1,1,'type', date('2025-06-30'), 'info', CURRENT_TIMESTAMP);
|
cs |
반응형
'DB > Postgre SQL' 카테고리의 다른 글
[PostgreSQL] 서비스 시작 및 중지 (0) | 2021.08.26 |
---|
댓글