弁財天

ゴフマン「専門家を信じるのではなく、自分自身で考えて判断せよ」

PostgreSQLのパーティショニング

PoscotgreSQLのパーティション

バージョン機能
8.4.1継承とパーティショニング
8.3.8継承とパーティショニング
8.2.14継承とパーティショニング
8.1.18継承とパーティショニング
8.0.22継承のみ
7.4.26継承のみ
7.3.21継承のみ

ログのようの巨大に膨れ上がるだけの表があるとする
もちろん、こんな実装は間違っていると思う

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

 

継承とCHECKを使って、特定の期間だけの子表を作成できる

CREATE TABLE measurement_y2006m02 (
CHECK ( logdate >= DATE '2006-02-01' AND logdate < DATE '2006-03-01' )
) INHERITS (measurement);

CREATE TABLE measurement_y2006m03 (
CHECK ( logdate >= DATE '2006-03-01' AND logdate < DATE '2006-04-01' )
) INHERITS (measurement);

 

子表にインデックスを作成する

CREATE INDEX measurement_y2006m02_logdate ON measurement_y2006m02 (logdate);
CREATE INDEX measurement_y2006m03_logdate ON measurement_y2006m03 (logdate);

 

制約による除外機能は
親表の検索時に、検索が不必要な子表の検索をしないので速い
これがパーティショニング

SET constraint_exclusion = on;
SELECT count(*) FROM measurement WHERE logdate >= DATE '2008-01-01';

 

2006年2月分のデータをまとめて削除できる

DROP TABLE measurement_y2006m02;

 

親表と切り離して独立した表にもできる

ALTER TABLE measurement_y2006m02 NO INHERIT measurement;

 

投稿されたコメント:

コメント
コメントは無効になっています。