PostgreSQLがv10になってからパーティショニングの設定が超ラクになりました。
これまでは、CREATE TABLE するときにトリガーや関数を逐一設定する必要がありましたが、
PostgreSQL 10からはCREATE TABLE文の中だけでパーティショニングの設定が可能です。
簡単なサンプルで見てみます。
-- 元となる親テーブルの作成 CREATE TABLE test_table ( id SERIAL, user_id INTEGER NOT NULL, name VARCHAR(512) NOT NULL, created_at TIMESTAMP NOT NULL ) -- user_idをキーにパーティションする PARTITION BY LIST (user_id); -- user_idが1の場合はtest_table_1へ CREATE TABLE test_table_1 PARTITION OF test_table FOR VALUES IN (1); -- user_idが2の場合はtest_table_2へ CREATE TABLE test_table_2 PARTITION OF test_table FOR VALUES IN (2); -- user_idが3と4の場合はtest_table_3へ CREATE TABLE test_table_3 PARTITION OF test_table FOR VALUES IN (3,4); -- user_idが5と6と7の場合はtest_table_4へ CREATE TABLE test_table_4 PARTITION OF test_table FOR VALUES IN (5,6,7); . . .
これだけでOKです。
ただ、このパーティショニングの方法だと、user_idが増えれば増えるほどパーティショニング子テーブルをいちいち CREATE TABLE する必要があるので、
子テーブルを予め10個作成しておき、user_idを10で割った余りを元にパーティショニングするように変更してみます。
CREATE TABLE test_table ( id SERIAL, user_id INTEGER NOT NULL, name VARCHAR(512) NOT NULL, created_at TIMESTAMP NOT NULL ) -- user_idを10で割った余りをキーにパーティションする PARTITION BY LIST ((user_id%10)); CREATE TABLE test_table_1 PARTITION OF test_table FOR VALUES IN (1); CREATE TABLE test_table_2 PARTITION OF test_table FOR VALUES IN (2); CREATE TABLE test_table_3 PARTITION OF test_table FOR VALUES IN (3); CREATE TABLE test_table_4 PARTITION OF test_table FOR VALUES IN (4); CREATE TABLE test_table_5 PARTITION OF test_table FOR VALUES IN (5); CREATE TABLE test_table_6 PARTITION OF test_table FOR VALUES IN (6); CREATE TABLE test_table_7 PARTITION OF test_table FOR VALUES IN (7); CREATE TABLE test_table_8 PARTITION OF test_table FOR VALUES IN (8); CREATE TABLE test_table_9 PARTITION OF test_table FOR VALUES IN (9); CREATE TABLE test_table_0 PARTITION OF test_table FOR VALUES IN (0);
以上でぇぇぇえ〜す。
0 件のコメント:
コメントを投稿