ALTER TABLE...SPLIT SUBPARTITIONコマンドは、既存のサブパーティションテーブルにサブパーティションを追加します。
概要
ALTER TABLE...SPLIT SUBPARTITIONコマンドを使用して、サブパーティションを2つのサブパーティションに分割し、サブパーティションのコンテンツを再配布できます。 ALTER TABLE...SPLIT SUBPARTITIONコマンドには2つの形式があります。
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 for PostgreSQL (Compatible with Oracle) が2つの新しいサブパーティションを作成します。 指定されたサブパーティションルールによって制約される値を含む行をnew_subpart1に移動し、残りの行をnew_subpart2に移動します。
新しいサブパーティション分割ルールは、既存のサブパーティションを定義するルールで指定された列を参照する必要があります。
新しいサブパーティションが存在するテーブルスペースを指定するには、TABLESPACE句を含めます。 テーブルスペースを指定しない場合、サブパーティションはデフォルトのテーブルスペースに作成されます。
テーブルにインデックスが付けられている場合は、新しいサブパーティションにインデックスが作成されます。
ALTER TABLE...SPLIT SUBPARTITIONコマンドを使用するには、テーブルの所有者であるか、スーパーユーザー (または管理者) 権限を持っている必要があります。
パラメーター
パラメーター | 説明 |
table_name | パーティションテーブルの名前 (オプションでスキーマ修飾) 。 |
subpartition_name | 分割するサブパーティションの名前。 |
new_subpart1 | 作成される最初の新しいサブパーティションの名前。 サブパーティション名は、すべてのパーティションおよびサブパーティション間で一意である必要があり、オブジェクト識別子の命名規則に従う必要があります。
|
new_subpart2 | 作成される2番目の新しいサブパーティションの名前。 サブパーティション名は、すべてのパーティションおよびサブパーティション間で一意である必要があり、オブジェクト識別子の命名規則に従う必要があります。
|
(value[, value]...) |
|
tablespace_name | パーティションまたはサブパーティションが存在するテーブルスペースの名前。 |
例-LISTサブパーティションの分割
次の例では、リストサブパーティションを分割し、サブパーティションのコンテンツを2つの新しいサブパーティション間で再配布します。 サンプルテーブル (sales) は、次のコマンドを使用して作成します。
テーブルの販売を作成する
(
dept_no number,
part_no varchar2,
country varchar2(20),
date 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')
)
);
acctg=# SELECT partition_name, subpartition_name, high_value FROM ALL_TAB_SUBPARTITIONS;
partition_name | subpartition_name | high_value
------------------ + ------------------- + -------------------
second_half_2012 | p2_europe | 「イタリア」、「フランス」
first_half_2012 | p1_europe | 「イタリア」、「フランス」
second_half_2012 | p2_americas | 'US '、'CANADA'
first_half_2012 | p1_americas | 'US '、'CANADA'
(4行)
(10, '4519b', 'FRANCE', '17-Jan-2012', '45000'),
(40, '9519b', 'US', '12-Apr-2012', '145000'),
(40, '4577b', 'US', '11-Nov-2012', '25000'),
(30, '7588b', 'CANADA', '14-Dec-2012', '50000'),
(30, '9519b', 'CANADA', '01-Feb-2012', '75000'),
(30, '4519b', 'CANADA', '08-Apr-2012', '120000'),
(40, '3788a', 'US', '12-May-2012', '4950'),
(10, '9519b', 'ITALY', '07-Jul-2012', '15000'),
(10, '9519a', 'FRANCE', '18-Aug-2012', '650000'),
(10, '9519b', 'FRANCE', '18-Aug-2012', '650000'),
(40, '4788a', 'US', '23-Sept-2012', '4950'),
(40、'4788b' 、'US '、'09-Oct-2012' 、'15000');
acctg=# SELECT tableid::regclass, * FROM sales;
tableoid | dept_no | part_no | 国 | 日付 | 金額
------------------- -------- ---------- ---------------- -------------------- -----------
sales_p1_europe | 10 | 4519b | フランス | 17-JAN-12 00:00:00 | 45000
sales_p1_americas | 40 | 9519b | 米国 | 12-APR-12 00:00:00 | 145000
sales_p1_americas | 30 | 9519b | カナダ | 01-FEB-12 00:00:00 | 75000
sales_p1_americas | 30 | 4519b | カナダ | 08-APR-12 00:00:00 | 120000
sales_p1_americas | 40 | 3788a | 米国 | 5月12日-12 00:00:00 | 4950
sales_p2_europe | 10 | 9519b | イタリア | 07-JUL-12 00:00:00 | 15000
sales_p2_europe | 10 | 9519a | フランス | 18-AUG-12 00:00:00 | 650000
sales_p2_europe | 10 | 9519b | フランス | 18-AUG-12 00:00:00 | 650000
sales_p2_americas | 40 | 4577b | 米国 | 11-NOV-12 00:00:00 | 25000
sales_p2_americas | 30 | 7588b | カナダ | 14-DEC-12 00:00:00 | 50000
sales_p2_americas | 40 | 4788a | 米国 | 23-SEP-12 00:00:00 | 4950
sales_p2_americas | 40 | 4788b | 米国 | 09-OCT-12 00:00:00 | 15000
(12行)
VALUES ('US')
INTO
(
SUBPARTITION p2_us,
SUBPARTITION p2_canada
);
acctg=# SELECT partition_name, subpartition_name, high_value FROM ALL_TAB_SUBPARTITIONS;
partition_name | subpartition_name | high_value
------------------ + ------------------- + -------------------
first_half_2012 | p1_europe | 「イタリア」、「フランス」
first_half_2012 | p1_americas | 'US '、'CANADA'
second_half_2012 | p2_europe | 「イタリア」、「フランス」
second_half_2012 | p2_canada | 'CANADA'
second_half_2012 | p2_us | 'US'
(5行)
acctg=# SELECT tableid::regclass, * FROM sales;
tableoid | dept_no | part_no | 国 | 日付 | 金額
------------------- -------- ---------- ---------------- -------------------- ------------
sales_p1_europe | 10 | 4519b | FRANCE | 17-JAN-12 00:00:00 | 45000
sales_p1_americas | 40 | 9519b | US | 12-APR-12 00:00:00 |145000
sales_p1_americas | 30 | 9519b | CANADA | 01-FEB-12 00:00:00 | 75000
sales_p1_americas | 30 | 4519b | CANADA | 08-APR-12 00:00:00 |120000
sales_p1_americas | 40 | 3788a | US | 12-MAY-12 00:00:00 | 4950
sales_p2_europe | 10 | 9519b | ITALY | 07-JUL-12 00:00:00 | 15000
sales_p2_europe | 10 | 9519a | FRANCE | 18-AUG-12 00:00:00 |650000
sales_p2_europe | 10 | 9519b | FRANCE | 18-AUG-12 00:00:00 |650000
sales_p2_us | 40 | 4577b | US | 11-NOV-12 00:00:00 | 25000
sales_p2_us | 40 | 4788a | US | 23-SEP-12 00:00:00 | 4950
sales_p2_us | 40 | 4788b | US | 09-OCT-12 00:00:00 | 15000
sales_p2_canada | 30 | 7588b | カナダ | 14-DEC-12 00:00:00 | 50000
(12行)
例-RANGEサブパーティションの分割
を使用して作成されます。(
dept_no number,
part_no varchar2,
country varchar2(20),
date 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')
)
);
acctg=# SELECT partition_name, subpartition_name, high_value FROM ALL_TAB_SUBPARTITIONS;
partition_name | subpartition_name | high_value
---------------- ------------------- + ---------------
ヨーロッパ | europe_2011 | '2012-Jan-01'
ヨーロッパ | europe_2012 | '2013-Jan-01'
asia | asia_2011 | '2012-Jan-01'
asia | asia_2012 | '2013-Jan-01'
アメリカ | americas_2011 | '2012-Jan-01'
アメリカ | americas_2012 | '2013-Jan-01'
(6行)
(10, '4519b', 'FRANCE', '17-Jan-2012', '45000'),
(20, '3788a', 'INDIA', '01-Mar-2012', '75000'),
(40, '9519b', 'US', '12-Apr-2012', '145000'),
(20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500'),
(40, '4577b', 'US', '11-Nov-2012', '25000'),
(30, '7588b', 'CANADA', '14-Dec-2012', '50000'),
(30, '9519b', 'CANADA', '01-Feb-2012', '75000'),
(30, '4519b', 'CANADA', '08-Apr-2012', '120000'),
(40, '3788a', 'US', '12-May-2012', '4950'),
(10, '9519b', 'ITALY', '07-Jul-2012', '15000'),
(10, '9519a', 'FRANCE', '18-Aug-2012', '650000'),
(10, '9519b', 'FRANCE', '18-Aug-2012', '650000'),
(20, '3788b', 'INDIA', '21-Sept-2012', '5090'),
(40, '4788a', 'US', '23-Sept-2012', '4950'),
(40, '4788b', 'US', '09-Oct-2012', '15000'),
(20, '4519a', 'INDIA', '18-Oct-2012', '650000'),
(20、'4519b' 、'INDIA' 、'2-Dec-2012 '、'5090');
acctg=# SELECT tableid::regclass, * FROM sales;
tableoid | dept_no | part_no | 国 | 日付 | 金額
--------------------- ------- --------- ------------ -------------------- ----
sales_europe_2012 | 10 | 4519b | フランス | 17-JAN-12 00:00:00 | 45000
sales_europe_2012 | 10 | 9519b | イタリア | 07-JUL-12 00:00:00 | 15000
sales_europe_2012 | 10 | 9519a | フランス | 18-AUG-12 00:00:00 | 650000
sales_europe_2012 | 10 | 9519b | フランス | 18-AUG-12 00:00:00 | 650000
sales_asia_2012 | 20 | 3788a | インド | 01-MAR-12 00:00:00 | 75000
sales_asia_2012 | 20 | 3788a | パキスタン | 04-JUN-12 00:00:00 | 37500
sales_asia_2012 | 20 | 3788b | インド | 21-SEP-12 00:00:00 | 5090
sales_asia_2012 | 20 | 4519a | インド | 18-OCT-12 00:00:00 | 650000
sales_asia_2012 | 20 | 4519b | インド | 02-DEC-12 00:00:00 | 5090
sales_americas_2012 | 40 | 9519b | 米国 | 12-APR-12 00:00:00 | 145000
sales_americas_2012 | 40 | 4577b | 米国 | 11-NOV-12 00:00:00 | 25000
sales_americas_2012 | 30 | 7588b | カナダ | 14-DEC-12 00:00:00 | 50000
sales_americas_2012 | 30 | 9519b | カナダ | 01-FEB-12 00:00:00 | 75000
sales_americas_2012 | 30 | 4519b | カナダ | 08-APR-12 00:00:00 | 120000
sales_americas_2012 | 40 | 3788a | 米国 | 5月12日-12 00:00:00 | 4950
sales_americas_2012 | 40 | 4788a | 米国 | 23-SEP-12 00:00:00 | 4950
sales_americas_2012 | 40 | 4788b | 米国 | 09-OCT-12 00:00:00 | 15000
(17行)
分割SUBPARTITION americas_2012
AT('2012-Jun-01 ')
INTO
(
SUBPARTITION americas_p1_2012、
SUBPARTITION americas_p2_2012
);
acctg=# SELECT partition_name, subpartition_name, high_value FROM ALL_TAB_SUBPARTITIONS;
partition_name | subpartition_name | high_value
---------------- ------------------- + ---------------
ヨーロッパ | europe_2012 | '2013-Jan-01'
ヨーロッパ | europe_2011 | '2012-Jan-01'
アメリカ | americas_2011 | '2012-Jan-01'
アメリカ | americas_p2_2012 | '2013-Jan-01'
americas | americas_p1_2012 | '2012-Jun-01'
asia | asia_2012 | '2013-Jan-01'
asia | asia_2011 | '2012-Jan-01'
(7行)
acctg=# SELECT tableid::regclass, * FROM sales;
tableoid | dept_no | part_no | 国 | 日付 | 金額
----------------------- + --------- + -------- + ------- ------------------- + --------- sales_europe_2012 | 10 | 4519b | フランス | 17-1月12 00:00:00 | 45000
sales_europe_2012 | 10 | 9519b | イタリア | 07-JUL-12 00:00:00 | 15000
sales_europe_2012 | 10 | 9519a | フランス | 18-AUG-12 00:00:00 | 650000
sales_europe_2012 | 10 | 9519b | フランス | 18-AUG-12 00:00:00 | 650000
sales_asia_2012 | 20 | 3788a | インド | 01-MAR-12 00:00:00 | 75000
sales_asia_2012 | 20 | 3788a | パキスタン | 04-JUN-12 00:00:00 | 37500
sales_asia_2012 | 20 | 3788b | インド | 21-SEP-12 00:00:00 | 5090
sales_asia_2012 | 20 | 4519a | インド | 18-OCT-12 00:00:00 | 650000
sales_asia_2012 | 20 | 4519b | インド | 02-DEC-12 00:00:00 | 5090
sales_americas_p1_2012 | 40 | 9519b | 米国 | 12-APR-12 00:00:00 | 145000
sales_americas_p1_2012 | 30 | 9519b | カナダ | 01-FEB-12 00:00:00 | 75000
sales_americas_p1_2012 | 30 | 4519b | カナダ | 08-APR-12 00:00:00 | 120000
sales_americas_p1_2012 | 40 | 3788a | 米国 | 5月12日-12 00:00:00 | 4950
sales_americas_p2_2012 | 40 | 4577b | 米国 | 11-NOV-12 00:00:00 | 25000
sales_americas_p2_2012 | 30 | 7588b | カナダ | 14-DEC-12 00:00:00 | 50000
sales_americas_p2_2012 | 40 | 4788a | 米国 | 23-SEP-12 00:00:00 | 4950
sales_americas_p2_2012 | 40 | 4788b | 米国 | 09-OCT-12 00:00:00 | 15000
(17行)