すべてのプロダクト
Search
ドキュメントセンター

PolarDB:インターバル・レンジパーティショニング

最終更新日:Mar 29, 2026

インターバル・レンジパーティショニングは、範囲パーティショニングを拡張した機能であり、データの挿入に応じて新しいパーティションを自動的に作成します。挿入されたデータが最後に定義された範囲パーティションの上限値(high value)を超えると、データベースは新たなパーティションを作成します。この処理には手動による介入は不要です。

インターバル・レンジパーティショニングを利用するには、INTERVAL 句を CREATE TABLE 文に含め、パーティションのサイズを指定します。パーティションキーの値に基づき、各範囲パーティションの上限値(high value)が決定され、これはトランジションポイントとして機能します。この境界値を超えるデータが挿入されると、自動的にパーティションが作成されます。

スキップ動作の仕組み:データが現在のトランジションポイントより 2 つ以上の間隔分先の範囲に該当する場合、データを実際に格納するパーティションのみが作成され、中間のパーティションは作成されません。

例:間隔が 1 ヶ月で、現在のトランジションポイントが 2019 年 2 月 15 日であるとします。2019 年 5 月 10 日付の行を挿入すると、2019 年 4 月 15 日~2019 年 5 月 15 日をカバーするパーティションが作成されます。2019 年 2 月 15 日~2019 年 3 月 15 日および 2019 年 3 月 15 日~2019 年 4 月 15 日のパーティションはスキップされ、データを実際に格納するパーティションのみが作成されます。

構文

CREATE TABLE [schema.]<table_name>
   <table_definition>
   PARTITION BY RANGE (<column> [, <column>]...)
   [INTERVAL (<constant> | <expression>)]
   [SUBPARTITION BY {RANGE | LIST | HASH} (<column> [, <column>]...)]
   (<range_partition_definition> [, <range_partition_definition>]...);

ここで、range_partition_definition は以下のとおりです。

PARTITION [<partition_name>]
  VALUES LESS THAN (<value> [, <value>]...)
  [TABLESPACE <tablespace_name>]
  [(<subpartition>, ...)]

INTERVAL パラメーターには、数値式および時間式を指定できます。

タイプ効果
数値INTERVAL (10)連続する 10 個の値ごとに 1 つのパーティションが作成される
INTERVAL (NUMTOYMINTERVAL(1, 'year'))1 年ごとに 1 つのパーティションが作成される
INTERVAL (NUMTOYMINTERVAL(1, 'month'))1 ヶ月ごとに 1 つのパーティションが作成される
INTERVAL (NUMTODSINTERVAL(1, 'day'))1 日ごとに 1 つのパーティションが作成される
INTERVAL (NUMTODSINTERVAL(7, 'day'))1 週間ごとに 1 つのパーティションが作成される

CREATE TABLE ... PARTITION BY の完全な構文については、「CREATE TABLE... PARTITION BY」をご参照ください。

次の例では、sales テーブルを sold_month 列でパーティション化し、1 ヶ月間隔のインターバル・レンジパーティショニングを適用しています。2 つの初期範囲パーティションによりトランジションポイントが確立され、そのポイントを超える行の挿入によって自動的にパーティションが作成されます。

テーブルの作成:

CREATE TABLE sales
(
  prod_id           int,
  prod_quantity     int,
  sold_month        date
)
PARTITION BY RANGE(sold_month)
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
(
  PARTITION p1
    VALUES LESS THAN('15-JAN-2019'),
  PARTITION p2
    VALUES LESS THAN('15-FEB-2019')
);

初期パーティションの照会:

SELECT partition_name, high_value FROM ALL_TAB_PARTITIONS;
 partition_name |      high_value
----------------+--------------------------------------------------------------
 P1             | FOR VALUES FROM ('15-JAN-19 00:00:00') TO ('15-FEB-19 00:00:00')
 P2             | FOR VALUES FROM (MINVALUE) TO ('15-JAN-19 00:00:00')
(2 rows)

トランジションポイントを超える行の挿入:

INSERT INTO sales VALUES (1, 200, '10-MAY-2019');
INSERT 0 1

パーティションの再照会:

SELECT partition_name, high_value FROM ALL_TAB_PARTITIONS;
 partition_name |      high_value
----------------+--------------------------------------------------------------
 SYS596430103   | FOR VALUES FROM ('15-APR-19 00:00:00') TO ('15-MAY-19 00:00:00')
 P1             | FOR VALUES FROM ('15-JAN-19 00:00:00') TO ('15-FEB-19 00:00:00')
 P2             | FOR VALUES FROM (MINVALUE) TO ('15-JAN-19 00:00:00')
(3 rows)

データベースは、2019 年 5 月 10 日付の行を格納するための新しいパーティションを自動的に 1 つ作成しました。2019 年 2 月 15 日~2019 年 3 月 15 日および 2019 年 3 月 15 日~2019 年 4 月 15 日のパーティションは、対応するデータが存在しないためスキップされました。

システムは、自動的に作成された各パーティションに SYS で始まる名前(例:SYS596430103)を割り当てます。この名前はセッションごとに一意ですが、セッションによって異なる場合があります。

インターバル・レンジパーティショニングの制限事項

  • パーティションキーは、数値または日付の範囲を指定する単一列である必要があります。

  • INTERVAL 句が有効になる前に、少なくとも 1 つの範囲パーティションを定義する必要があります。

  • 索引構成表では、INTERVAL 句はサポートされていません。

  • リストパーティション化されたテーブルには、ドメインインデックスを作成できません。

  • パーティションキー列には、NULL、Not-a-Number(NaN)、無限大(Infinity)の値を含めることはできません。

  • INTERVAL 句内の式は、非負の定数値に評価される必要があります。

  • インターバル・レンジパーティションは、昇順でのみ作成されます。