全部產品
Search
文件中心

PolarDB:ALTER TABLE…ADD PARTITION

更新時間:Jul 06, 2024

ALTER TABLE…ADD PARTITION命令用於將分區添加到現有的分區表中。

文法介紹

使用ALTER TABLE…ADD PARTITION命令把分區添加到現有的分區表中。文法如下:
ALTER TABLE table_name ADD PARTITION partition_definition;
其中 partition_definition 是:
{list_partition | range_partition}
list_partition 是:
PARTITION [partition_name]
  VALUES (value[, value]...)
  [TABLESPACE tablespace_name]
  [(subpartition, ...)]
range partition 是:
PARTITION [partition_name]
  VALUES LESS THAN (value[, value]...)
  [TABLESPACE tablespace_name]
  [(subpartition, ...)]
其中 subpartition 是:
{list subpartition | range subpartition}
list subpartition 是:
SUBPARTITION [subpartition_name]
  VALUES (value[, value]...)
  [TABLESPACE tablespace_name]
range subpartition 是:
SUBPARTITION [subpartition_name ]
  VALUES LESS THAN (value[, value]...)
  [TABLESPACE tablespace_name]

描述

ALTER TABLE…ADD PARTITION命令用於將分區添加到現有的分區表中。在分區表中對於定義的分區數量沒有上限。

新的分區必須與現有分區的類型(LIST or RANGE)相同。新分區規則必須引用和定義現有分區的分區規則中指定的相同列。

您不能使用ALTER TABLE…ADD PARTITION語句把分區添加到帶有MAXVALUE或 DEFAULT規則的表中。需要注意的是,您可以交替使用ALTER TABLE。SPLIT PARTITION語句對現有分區進行劃分,有效增加表中的分區數量。

RANGE分區必須以升序的方式指定。您不能把新分區添加在RANGE分區表中現有的分區之前。

包括TABLESPACE子句指定新分區要所屬的資料表空間。如果您沒有指定資料表空間, 那麼分區將所屬於預設資料表空間。

如果對錶進行了索引設定, 那麼索引將建立在新分區上。 要使用ALTER TABLE…ADD PARTITION命令,您必須是表的擁有者或有超級使用者(或管理員)的許可權。

參數

參數 參數說明
table name 要建立的表名稱(可以採用模式限定的方式引用)。
partition name 要建立的分區名稱。分區名稱在所有分區和子分區中必須是唯一的,且必須遵循給物件識別碼命名的慣例。
subpartition name 要建立的子分區名稱。子分區名稱在所有分區和子分區中必須是唯一的,且必須遵循給物件識別碼命名的慣例。
(value[, value]...) 使用value來指定一個引用的文本值(或以逗號分隔的文本值列表)將表專案劃分為不同的分區。每個分區規則必須至少指定一個值,但在規則中對於指定的值的數量沒有上限要求。Value可能為null default(如果指定了一個list分區的話)或 maxvalue(如果指定了一個range 分區的話)。

更多關於建立default maxvalue分區的資訊請參見在LIST或RANGE 分區表中處理偏離值

tablespace name 分區或子分區所屬的資料表空間名稱。

添加分區到LIST 分區表示例

下列樣本把分區添加到列表分區表sales中。通過使用下列命令建立表:
CREATE TABLE sales
(
  dept_no     number,   
  part_no     varchar2,
  country     varchar2(20),
  date        date,
  amount      number
)
PARTITION BY LIST(country)
(
  PARTITION europe VALUES('FRANCE', 'ITALY'),
  PARTITION asia VALUES('INDIA', 'PAKISTAN'),
  PARTITION americas VALUES('US', 'CANADA')
);
表包含三個分區(americas、asia 和 europe):
acctg=# SELECT partition_name, high_value FROM ALL_TAB_PARTITIONS;
 partition_name |     high_value      
----------------+---------------------
 americas       | 'US', 'CANADA'      
 asia           | 'INDIA', 'PAKISTAN' 
 europe         | 'FRANCE', 'ITALY'   
(3 rows)    
下述命令用於添加分區east_asia到表sales中:
ALTER TABLE sales ADD PARTITION east_asia 
  VALUES ('CHINA', 'KOREA');
在調用這個命令之後, 表包括了east_asia分區。
acctg=# SELECT partition_name, high_value FROM ALL_TAB_PARTITIONS;
 partition_name |     high_value      
----------------+---------------------
 east_asia      | 'CHINA', 'KOREA'    
 americas       | 'US', 'CANADA'      
 asia           | 'INDIA', 'PAKISTAN' 
 europe         | 'FRANCE', 'ITALY'   
(4 rows)

添加分區到RANGE 分區表示例

下列樣本添加了一個分區到定界分割表sales中:

CREATE TABLE sales
(
  dept_no     number,
  part_no     varchar2,
  country     varchar2(20),
  date        date,
  amount      number
)
PARTITION BY RANGE(date)
(
  PARTITION q1_2012 
    VALUES LESS THAN('2012-Apr-01'),
  PARTITION q2_2012 
    VALUES LESS THAN('2012-Jul-01'),
  PARTITION q3_2012 
    VALUES LESS THAN('2012-Oct-01'),
  PARTITION q4_2012 
    VALUES LESS THAN('2013-Jan-01')
);
表包含四個分區(q1_2012、q2_2012、q3_2012 和 q4_2012):
acctg=# SELECT partition_name, high_value FROM ALL_TAB_PARTITIONS;
 partition_name |  high_value   
----------------+---------------
 q4_2012        | '2013-Jan-01' 
 q3_2012        | '2012-Oct-01' 
 q2_2012        | '2012-Jul-01' 
 q1_2012        | '2012-Apr-01' 
(4 rows)
下列命令添加了一個名為q1_2013的分區到表sales 中:
ALTER TABLE sales ADD PARTITION q1_2013 
  VALUES LESS THAN('01-APR-2013');
在調用這個命令之後,表包括了分區q1_2013:
acctg=# SELECT partition_name, high_value FROM ALL_TAB_PARTITIONS;
 partition_name |  high_value   
----------------+---------------
 q1_2012        | '2012-Apr-01' 
 q2_2012        | '2012-Jul-01' 
 q3_2012        | '2012-Oct-01' 
 q4_2012        | '2013-Jan-01' 
 q1_2013        | '01-APR-2013' 
(5 rows)