잠시만 기다려 주세요

HOME   |  여기는?   |  바다물때표   |  여러가지 팁 (888)  |  추천 및 재미 (154)  |  자료실 (20)  |  끄적거림 (520)  |  시나리오 (760)  |  드라마 대본 (248)  |  

2020년 09월 25일
어제와 똑같이 살면서 다른 미래를 기대하는 건 정신병 초기증세다. - 알버트 아인슈타인
 




    postgresql

postgresql - postgresql 10 이상 파티셔닝 파티션 partitioning, 설정... 대용량 테이블 데이터 쪼개기, 분리하기...
이 름 : 바다아이   |   조회수 : 2686         짧은 주소 : https://www.bada-ie.com/su/?631591801495
아래는 postgresql 10 이상 버전에서 파티셔닝 방법입니다.
10 부터 파티셔닝 부분이 정말 편해졌습니다. 예전에는 함수 만들어서 트리거 하고 그랬는데 이제 자체로 지원합니다.
대부분 날짜 별로 분류해 놓기 때문에 날짜 기준으로 설명합니다. 날짜가 아니라도 숫자로 해도 됩니다.

파티셔닝이 뭐냐? 물으면 
한 테이블에 들어갈 엄청나게 많은 자료를 조건을 걸어서 여러 테이블로 쪼개서 넣게 만드는 겁니다.
이러면 테이블이 가벼워지겠죠....

만드실 때는 꼭 조건에 맞는 하위 파티션 테이블을 꼭 잘 만들어 놓아야 합니다.
자료를 입력해 보면 알겠지만 조건에 맞는 하위 파티션 테이블이 없으면 에러가 납니다.
있으면 해당 조건에 맞는 하위 파티션 테이블로 들어가고요....

간단히 설명해 놓습니다. 아래 정도만 알아도 응용해서 할 수 있을 겁니다. 
쉽게 말해 핵심은 메인 파티션 테이블 껍데기를 놓고 실제 데이터는 하위 파티션으로 넣게 된다고 보시면 됩니다.
구조는 그렇게 이해하시면 편합니다.

아래처럼 계속 하위 파티션에 또 파티셔닝을 걸고 또 그 하위에 하위를 만드는 것도 가능합니다.
그러나 이건 개인적으로 권하지 않습니다. 

CREATE TABLE aaa_2006 PARTITION OF aaa FOR VALUES FROM ('2006-01-01') TO ('2006-12-31') PARTITION BY RANGE (num);
CREATE TABLE aaa_2006_1 PARTITION OF aaa_2006 FOR VALUES FROM ('1') TO ('100');


주의 : 
기존 테이블을 파티션용 테이블로 전환은 안됩니다... 또한 파티션된 테이블 역시 일반 테이블로 전환되지 않습니다.
다만 필드 조건에 맞는 일반 테이블을 하위 파티션 테이블로 붙일 수는 있습니다.
또한 하위 파티션 테이블을 일반 테이블로 분리는 가능합니다.
참고 해서..... 기존 테이블을 적용하려면... 새로 만들고 복사하는 게 좋겠죠..
그래도 나는 기존 꺼로 하고 싶다 하시는 분들은 예전 함수, 트리거 방식으로 파티셔닝을 구현하셔야 합니다.


파티션 테이블을 만듭니다.

CREATE TABLE aaa (
    num         int not null,
    logdate         date not null
) PARTITION BY RANGE (logdate);


연결 할 하위 파티션 테이블을 생성합니다.

CREATE TABLE aaa_2006 PARTITION OF aaa FOR VALUES FROM ('2006-01-01') TO ('2006-12-31');
CREATE TABLE aaa_2007 PARTITION OF aaa FOR VALUES FROM ('2007-01-01') TO ('2007-12-31');
CREATE TABLE aaa_2008 PARTITION OF aaa FOR VALUES FROM ('2008-01-01') TO ('2008-12-31');


인덱스도 생성합니다.

CREATE INDEX ON aaa_2006 (logdate);
CREATE INDEX ON aaa_2007 (logdate);
CREATE INDEX ON aaa_2008 (logdate);


데이터를 입력해 봅시다. 넣어보면 3개 하위 파티션에 조건에 맞게 들어가 있을 겁니다.

insert into aaa (num, logdate) values ('1', '2006-01-01');
insert into aaa (num, logdate) values ('2', '2007-01-01');
insert into aaa (num, logdate) values ('3', '2008-01-01');


잘 입력 되었나 확인해 보면...

select * from aaa;
 num |  logdate   
-----+------------
   1 | 2006-01-01
   2 | 2007-01-01
   3 | 2008-01-01
(3개 행)

select * from aaa_2006;
 num |  logdate   
-----+------------
   1 | 2006-01-01
(1개 행)

select * from aaa_2007;
 num |  logdate   
-----+------------
   2 | 2007-01-01
(1개 행)

select * from aaa_2008;
 num |  logdate   
-----+------------
   3 | 2008-01-01
(1개 행)



파티션 관련 테이블 삭제시에는.... 

DROP TABLE aaa_2006;


자료를 보존하면서 하위 파티션을 분리 하려면 아래처럼 하세요.... 일반 테이블로 빠지게 됩니다.

ALTER TABLE aaa DETACH PARTITION aaa_2006;


자료를 보존하면서 일반 테이블을 하위 파티션 테이블로 다시 추가 할 때...

ALTER TABLE aaa ATTACH PARTITION aaa_2006 FOR VALUES FROM ('2006-01-01') TO ('2006-12-31');


만약 하위 파티션을 데리고 있는 테이블을 삭제하면 관련 하위 파티션 테이블도 전부 삭제 됩니다. 
!! 주의 하세요 !!

DROP TABLE aaa;

| |


      1 page / 2 page
번 호 카테고리 제 목 이름 조회수
44 postgresql , count(*) .... 바다아이 302
43 postgresql How to do an update + join in PostgreSQL?, 바다아이 275
42 postgresql sequence(퀀) 바다아이 308
41 postgresql , , , index create, , 바다아이 254
40 postgresql postgresql log_timezone .... 바다아이 624
39 postgresql postgresql SEQUENCE reset .... 바다아이 1907
38 postgresql [PostgreSql] WITH , , Operator 바다아이 1884
37 postgresql postgresql for, foreach , 바다아이 2000
36 postgresql postgresql , , into ... 바다아이 1949
35 postgresql postgresql PL/pgSQL - SQL Procedural Language, , 바다아이 4266
34 postgresql postgresql ... .. , , 바다아이 2708
33 postgresql postgresql CSV export/import 바다아이 2278
32 postgresql postgresql tablespace , .... 바다아이 3059
현재글 postgresql postgresql 10 partitioning, ... , ... 바다아이 2687
30 postgresql Using PostgreSQL Arrays, ... ... 바다아이 2471
29 postgresql PostgreSQL (TRIGGER) (function) 바다아이 2283
28 postgresql Optimize and Improve PostgreSQL Performance with VACUUM, ANALYZE, and REINDEX 바다아이 3008
27 postgresql postgresql tuple . vacuumdb .. , . 바다아이 2357
26 postgresql postgresql , .. 바다아이 2462
25 postgresql postgresql , size, 바다아이 3628
24 postgresql postgresql , , .... 바다아이 2144
23 postgresql PostgreSQL Replication, , , master, slave 바다아이 2920
22 postgresql postgresql case 바다아이 2255
21 postgresql postgresql with 바다아이 2260
20 postgresql postgresql , , string 바다아이 2670
19 postgresql Postgresql partitioning table , , , 바다아이 2603
18 postgresql PostgreSQL 바다아이 2615
17 postgresql postgresql vacuumdb, psql, pg_dump password crontab , pgpass 바다아이 2961
16 postgresql postgresql sequence 퀀 auto_increment . 바다아이 3424
15 postgresql postgresql , .... 바다아이 3824
| |








Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 firefox 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ FreeBSD + GoLang + PostgreSQL ]
서버위치 : vultr.com 서울  실행시간 : 0.26192
to webmaster... gogo sea. gogo sea.