카테고리 없음

postgresql 파티션 테스트

조이0226 2024. 7. 1. 18:19

 

drop table measurement;

CREATE TABLE measurement (
    city_id         int not null,
    logdate         date not null,
    peaktemp        int,
    unitsales       int
) PARTITION BY RANGE (logdate);


CREATE TABLE measurement_2407 PARTITION OF measurement FOR VALUES FROM ('2024-07-01') TO ('2024-08-01');
CREATE TABLE measurement_2408 PARTITION OF measurement FOR VALUES FROM ('2024-08-01') TO ('2024-09-01');
CREATE TABLE measurement_2409 PARTITION OF measurement FOR VALUES FROM ('2024-09-01') TO ('2024-10-01');

--CREATE TABLE measurement_y2006m02 PARTITION OF measurement FOR VALUES FROM ('2006-02-01') TO ('2006-03-01') PARTITION BY RANGE (peaktemp);

INSERT INTO measurement (city_id, logdate, peaktemp, unitsales) values (1, now(), 1, 100);

select * from measurement;
select * from measurement_2407;

-- 특정 파티션 테이블 삭제  
drop table measurement_2407

-- drop 했으니 당연히 조회 안 됨
select * from measurement_2407;

-- 조회되나 2407 데이터는 조회 안 됨 
select * from measurement;

-- 파티션 테이블 새로 생성 
CREATE TABLE measurement_2407 PARTITION OF measurement FOR VALUES FROM ('2024-07-01') TO ('2024-08-01');

INSERT INTO measurement (city_id, logdate, peaktemp, unitsales) values (1, now(), 1, 100);

-- 조회 
select * from measurement_2407;
select * from measurement;

-- 파티션 테이블 분리 
ALTER TABLE measurement DETACH PARTITION measurement_2407;

-- 조회됨 
select * from measurement_2407;
-- 2407 데이터 조회 안 됨 
select * from measurement;

-- insert 안 됨 
INSERT INTO measurement (city_id, logdate, peaktemp, unitsales)
values (1, now(), 2, 200);

-- 08월 데이터는 insert 됨 
INSERT INTO measurement (city_id, logdate, peaktemp, unitsales) VALUES (1, '2024-08-01', 22, 345);

-- 조회됨 
select * from measurement_2408;
-- 2407 데이터 조회 안 됨 
select * from measurement;

-- 파티션 테이블 다시 붙임  
ALTER TABLE measurement ATTACH PARTITION measurement_2407 FOR VALUES FROM ('2024-07-01') TO ('2024-08-01');

-- 조회 됨
select * from measurement_2407;
-- 2407, 2408 데이터 조회 됨 
select * from measurement;

-- insert 됨 
INSERT INTO measurement (city_id, logdate, peaktemp, unitsales) values (1, now(), 2, 200);


select * from measurement_2407;
select * from measurement;

 

참고 문서