全部產品
Search
文件中心

PolarDB:轉換RANGE和INTERVAL RANGE分區

更新時間:Jul 06, 2024

本文介紹如何轉換RANGE分區和INTERVAL RANGE分區。

RANGE分區轉換為INTERVAL RANGE分區

ALTER TABLE...SET INTERVAL命令可將現有的RANGE分區錶轉換為INTERVAL RANGE分區表。

設定範圍或時間間隔後,資料庫會自動建立一個指定範圍或時間間隔的新分區,並將資料插入到新分區中。

命令如下:

ALTER TABLE <table_name> SET INTERVAL (<constant> | <expression>);

關於INTERVAL參數的資訊,請參見INTERVAL RANGE分區

INTERVAL RANGE分區轉換為RANGE分區

SET INTERVAL()命令用于禁用INTERVAL RANGE分區。禁用後,資料庫會將INTERVAL RANGE分區錶轉換為RANGE分區表,並將INTERVAL RANGE分區的範圍或時間間隔設定為RANGE分區的範圍或時間間隔。

命令如下:

ALTER TABLE <table_name> SET INTERVAL ();

樣本

以下樣本會將表sales從RANGE分區轉換為INTERVAL RANGE分區,並在分區表中插入資料。

建立RANGE分區表sales。樣本如下:

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

查詢ALL_TAB_PARTITIONS視圖。樣本如下:

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)

將RANGE分區錶轉換為INTERVAL RANGE分區表。樣本如下:

ALTER TABLE sales SET INTERVAL (NUMTOYMINTERVAL(1, 'MONTH'));

插入超過定界分割的資料。樣本如下:

INSERT INTO sales VALUES (1,100,'05-APR-2019');
INSERT 0 1

插入資料後,重新查詢ALL_TAB_PARTITIONS視圖。樣本如下:

SELECT partition_name, high_value FROM ALL_TAB_PARTITIONS;

成功插入資料,系統將產生一個INTERVAL RANGE分區名稱,該名稱因每個會話而不同。返回結果如下:

 partition_name |      high_value
----------------+----------------------
 SYS596430103   | FOR VALUES FROM ('15-MAR-19 00:00:00') TO ('15-APR-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)