PostgreSQL13 レンジパーティションを作成する

PostgreSQL13 レンジパーティションを作成する

PostgreSQLで、レンジパーティションを作成するまでの手順を記述してます。

環境

  • OS CentOS 7.9.2009 (Core)
  • PostgreSQL 13.1

テーブル作成

まずはテーブルの作成を行います。ここでは日付をレンジとしてます。

CREATE TABLE sample (
    id int not null,
	name text not null,
    date date not null
)PARTITION BY RANGE (date);

次に、パーティションを作成してます。

CREATE TABLE sample_2019 PARTITION OF sample
    FOR VALUES FROM ('2019-01-01') TO ('2020-01-01');

CREATE TABLE sample_2020 PARTITION OF sample
    FOR VALUES FROM ('2020-01-01') TO ('2021-01-01');

CREATE TABLE sample_2021 PARTITION OF sample
    FOR VALUES FROM ('2021-01-01') TO ('2022-01-01');

「sample」テーブルを確認すると「パーティション」が作成されていることが確認できます。

「sample」テーブルに適当なデータを挿入します。

ここでは

2019年 500レコード
2020年 25000レコード
2021年 474500レコード

の合計50万レコードを使用してます。

パーティション確認

各パーティションごとにデータが入っていることを確認してみます。

select * from sample_2019;
select * from sample_2020;

それぞれ作成したパーティションに、データが入っていることが確認できます。

当然、親テーブルにもデータが入っていることが確認できます。

実行計画確認

実行計画を確認しても、パーティションが使用されていることが確認できます。

explain analyze select * from sample where date between '2019-01-01' and '2019-02-01';

実行結果

範囲外のデータを挿入

範囲外のデータを挿入するとエラーとなり挿入できません。

INSERT INTO sample VALUES (1, 'name','2022-01-01');