PolarDB PostgreSQL版(兼容Oracle)支持分割一個分區或者子分區,本文詳細介紹了其語法及示例。
語法說明
分割分區
通過ALTER TABLE…SPLIT PARTITION
命令將單個分區分為兩個分區,并在新分區之間重新分配分區的內容。
ALTER TABLE <table_name> SPLIT PARTITION <partition_name>
AT (<range_part_value>)
INTO
(
PARTITION <new_part1>
[TABLESPACE <tablespace_name>]
PARTITION <new_part2>
[TABLESPACE <tablespace_name>]
);
ALTER TABLE <table_name> SPLIT PARTITION <partition_name>
VALUES (<value>[, <value>]...)
INTO
(
PARTITION <new_part1>
[TABLESPACE <tablespace_name>]
PARTITION <new_part2>
[TABLESPACE <tablespace_name>]
);
分割子分區
通過ALTER TABLE…SPLIT SUBPARTITION
命令將單個子分區分為兩個子分區,并重新分布子分區的內容。
ALTER TABLE <table_name> SPLIT SUBPARTITION <subpartition_name>
AT (range_part_value)
INTO
(
SUBPARTITION <new_subpart1>
[TABLESPACE <tablespace_name>],
SUBPARTITION <new_subpart2>
[TABLESPACE <tablespace_name>]
);
ALTER TABLE <table_name> SPLIT SUBPARTITION <subpartition_name>
VALUES (<value>[, <value>]...)
INTO
(
SUBPARTITION <new_subpart1>
[TABLESPACE <tablespace_name>],
SUBPARTITION <new_subpart2>
[TABLESPACE <tablespace_name>]
);
ALTER TABLE...SPLIT SUBPARTITION
命令將子分區添加到現有的子分區表中。定義的子分區數量沒有上限。當執行ALTER TABLE...SPLIT SUBPARTITION
命令時,PolarDB PostgreSQL版(兼容Oracle)會創建兩個新子分區,將包含受指定子分區規則約束的值的任何行移至new_subpart1
,并將所有剩余行移至new_subpart2
。
示例
分割分區
通過ALTER TABLE...SPLIT PARTITION
命令將分區添加到現有的LIST或RANGE分區表中。
說明
ALTER TABLE…SPLIT PARTITION
命令無法將分區添加到HASH分區表。
--分割列表分區
ALTER TABLE sales SPLIT PARTITION americas
VALUES ('US')
INTO (PARTITION us, PARTITION canada);
--分割范圍分區
ALTER TABLE sales SPLIT PARTITION q4_2012
AT ('15-Nov-2012')
INTO
(
PARTITION q4_2012_p1,
PARTITION q4_2012_p2
);
分割列表子分區
CREATE TABLE sales
(
dept_no number,
part_no varchar2,
country varchar2(20),
date date,
amount number
)
PARTITION BY RANGE(date)
SUBPARTITION BY LIST (country)
(
PARTITION first_half_2012 VALUES LESS THAN('01-JUL-2012')
(
SUBPARTITION p1_europe VALUES ('ITALY', 'FRANCE'),
SUBPARTITION p1_americas VALUES ('US', 'CANADA')
),
PARTITION second_half_2012 VALUES LESS THAN('01-JAN-2013')
(
SUBPARTITION p2_europe VALUES ('ITALY', 'FRANCE'),
SUBPARTITION p2_americas VALUES ('US', 'CANADA')
)
);
ALTER TABLE sales SPLIT SUBPARTITION p2_americas
VALUES ('US')
INTO
(
SUBPARTITION p2_us,
SUBPARTITION p2_canada
);
分割范圍子分區
CREATE TABLE sales
(
dept_no number,
part_no varchar2,
country varchar2(20),
date date,
amount number
)
PARTITION BY LIST(country)
SUBPARTITION BY RANGE(date)
(
PARTITION europe VALUES('FRANCE', 'ITALY')
(
SUBPARTITION europe_2011
VALUES LESS THAN('2012-Jan-01'),
SUBPARTITION europe_2012
VALUES LESS THAN('2013-Jan-01')
),
PARTITION asia VALUES('INDIA', 'PAKISTAN')
(
SUBPARTITION asia_2011
VALUES LESS THAN('2012-Jan-01'),
SUBPARTITION asia_2012
VALUES LESS THAN('2013-Jan-01')
),
PARTITION americas VALUES('US', 'CANADA')
(
SUBPARTITION americas_2011
VALUES LESS THAN('2012-Jan-01'),
SUBPARTITION americas_2012
VALUES LESS THAN('2013-Jan-01')
)
);
ALTER TABLE sales
SPLIT SUBPARTITION americas_2012
AT('2012-Jun-01')
INTO
(
SUBPARTITION americas_p1_2012,
SUBPARTITION americas_p2_2012
);
文檔內容是否對您有幫助?