PostgreSQL10 の新機能 Declarative Partitioning について検証してみた

こんにちは。サイオステクノロジー OSS サポート担当 Y です。

今回は PostgreSQL 10 の新機能である Declarative Partitioning を試してみました。(※以下の内容は PostgreSQL 10.1 にて検証/調査しています。)

(https://www.postgresql.org/docs/10/static/ddl-partitioning.html#DDL-PARTITIONING-DECLARATIVE)

■はじめに

PostgreSQL 10 の Declarative Partitioning には RANGE パーティションと LIST パーティションがあるのですが、今回は RANGE パーティションを利用して以下の感じでレコードを振り分けてみようと思います。

■検証

さて、まずはテーブルを作成してみます。親テーブル “hoge” に対して子テーブル “hoge_a”, “hoge_b” を作成しています。

さっそく作成した親テーブル “hoge” に “1” ~ “10” の値を INSERT しようとしたのですが、エラーが出てしまいました…

エラーの内容を見ると “5” を格納するパーティションが存在していない状況のようです。

結論から言うと、テーブルを定義する際に境界値の扱いをよく考えていませんでした…

試しに各境界値の値 (1, 5, 6, 10) を個別に INSERT してみると以下の感じになりました。

どうやら子テーブルを作成する際の “FROM (X) TO (Y)” は “X <= a < Y” という定義になるようです。

ということで、テーブル作成からやり直します。

改めて “1” ~ “10” の値を INSERT してみると、今度は無事に値を格納することができました。

続けて子テーブルの状況も確認してみると、設定した条件通りにレコードが振り分けられていることが確認できました。

■最後に

さて、今回は PostgreSQL 10 の新機能である Declarative Partitioning を試してみようとしていきなりエラーに直面した訳ですが、上記内容 (境界値の扱い) についてはドキュメントにちゃんと記載されていました!

(https://www.postgresql.org/docs/10/static/sql-createtable.html)

また、範囲の指定に MINVALUE, MAXVALUE という特殊な値を指定すると “XX 以上”, “XX 以下” といったような上限 (もしくは下限) を設定しない範囲指定 (“XX <= a”, “a < XX”) もできるようです。

ということで、今回は Declarative Partitioning のお話でした。

>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメント投稿

メールアドレスは表示されません。


*