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

PolarDB:ALTER TABLE... 取引所

最終更新日:May 29, 2024

ALTER TABLE...EXCHANGE PARTITIONコマンドは、既存のテーブルをパーティションまたはサブパーティションとスワップします。

概要

パーティション分割されたテーブルに大量のデータを追加する場合は、ALTER table... EXCHANGE PARTITIONコマンドを使用して、データの一括ロードを転送できます。 ALTER TABLE...EXCHANGE PARTITIONコマンドを使用して、古いまたは冗長なデータをストレージから削除することもできます。

ALTER TABLE...EXCHANGE PARTITIONコマンドには2つの形式があります。
  • 最初のフォームは、テーブルをパーティションに交換します:
    ALTER table target_table 
      EXCHANGE PARTITION target_partition 
      WITH TABLE source_table 
      [(WITH | WITHOUT) VALIDATION]; 
  • 2番目のフォームは、テーブルをサブパーティションに交換します:
    ALTER table target_table 
      EXCHANGE SUBPARTITION target_subpartition 
      WITH TABLE source_table 
      [(WITH | WITHOUT) VALIDATION]; 
ALTER TABLE...EXCHANGE PARTITIONコマンドは、パーティションとサブパーティションを区別しません。
  • パーティションを交換するには、exchange partition句またはEXCHANGE SUBPARTITION句を使用します。
  • サブパーティションを交換するには、exchange PARTITION句またはEXCHANGE subpartition句を使用します。

説明

ALTER TABLE...EXCHANGE PARTITIONコマンドが完了すると、データがスワップされます。 ターゲットパーティションに元々存在するデータはソーステーブルに存在し、ソーステーブルに元々存在するデータはターゲットパーティションに存在する。

ソーステーブルの構造は、ターゲットテーブルの構造と一致する必要があります (両方のテーブルに一致する列とデータ型が必要です) 。 テーブル内に含まれるデータは、分割制約に従わなければならない。

PolarDB for PostgreSQL (Compatible with Oracle) はWITHOUT VALIDATION句を受け入れますが、無視します。 新しいテーブルは常に検証されます。

そのテーブルに対してALTER table... EXCHANGE PARTITIONまたはALTER TABLE...EXCHANGE SUBPARTITIONを呼び出すテーブルを所有する必要があります。

パラメーター

パラメーター説明
target_tableパーティションが存在するテーブルの名前 (オプションでスキーマ修飾) 。
target_partition置き換えられるパーティションまたはサブパーティションの名前。
source_tabletarget_partitionを置き換えるテーブルの名前。

例-パーティションのテーブルを交換する

次の例は、salesテーブルのパーティション (americas) のテーブルを交換することを示しています。 次のコマンドを実行して、salesテーブルを作成します。

(
  dept_no number,   
  part_no varchar2,
  country varchar2(20),
  date    date,
  金額番号
)
リストによるパーティー (国)
(
  PARTITION europe VALUES('FRANCE', 'ITALY'),
  PARTITION asia VALUES('INDIA', 'PAKISTAN'),
  PARTITIONアメリカスバリュー (「米国」、「カナダ」)
); 
次のコマンドを実行して、サンプルデータをsalesテーブルに追加します。

  (40, '9519b', 'US', '12-Apr-2012', '145000'),
  (10, '4519b', 'FRANCE', '17-Jan-2012', '45000'),
  (20, '3788a', 'INDIA', '01-Mar-2012', '75000'),
  (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500'),
  (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'),
  (20, '4519a', 'INDIA', '18-Oct-2012', '650000'),
  (20、'4519b' 、'INDIA' 、'2-Dec-2012 '、'5090'); 
salesテーブルを照会すると、americasパーティションに1行のみが存在することがわかります。
acctg=# SELECT tableid::regclass, * FROM sales;
    tableoid | dept_no | part_no | 国 | 日付 | 金額
-------------- ------------------------------------ ------------------- --------------
 sales_europe | 10 | 4519b | フランス | 17-JAN-12 00:00:00 | 45000
 sales_europe | 10 | 9519b | イタリア | 07-JUL-12 00:00:00 | 15000
 sales_europe | 10 | 9519a | フランス | 18-AUG-12 00:00:00 | 650000
 sales_europe | 10 | 9519b | フランス | 18-AUG-12 00:00:00 | 650000
 sales_asia | 20 | 3788a | インド | 01-MAR-12 00:00:00 | 75000
 sales_asia | 20 | 3788a | パキスタン | 04-JUN-12 00:00:00 | 37500
 sales_asia | 20 | 3788b | インド | 21-SEP-12 00:00:00 | 5090
 sales_asia | 20 | 4519a | インド | 18-OCT-12 00:00:00 | 650000
 sales_asia | 20 | 4519b | インド | 02-DEC-12 00:00:00 | 5090
 sales_americas | 40 | 9519b | 米国 | 12-APR-12 00:00:00 | 145000
(10行) 
次のコマンドは、salesテーブルの定義と一致するテーブル (n_america) を作成します。

(
  dept_no number,   
  part_no varchar2,
  country varchar2(20),
  date    date,
  金額番号
); 
次のコマンドは、n_americaテーブルにデータを追加します。 データはamericasパーティションのパーティション分割ルールに準拠しています:
INSERT INTO n_america VALUES
  (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'),
  (40, '4788a', 'US', '23-Sept-2012', '4950'),
  (40、'4788b' 、'US '、'09-Oct-2012' 、'15000'); 
次のコマンドは、テーブルをパーティションテーブルにスワップします。
 
  EXCHANGE PARTITION americas 
  WITH TABLE n_america; 
salesテーブルのクエリは、n_americaテーブルのコンテンツがamericasパーティションのコンテンツと交換されたことを示しています:
acctg=# SELECT tableid::regclass, * FROM sales;
    tableoid | dept_no | part_no | 国 | 日付 | 金額
-------------- ---------- ----------- ----------------- -------------------- --------------
 sales_europe | 10 | 4519b | フランス | 17-JAN-12 00:00:00 | 45000
 sales_europe | 10 | 9519b | イタリア | 07-JUL-12 00:00:00 | 15000
 sales_europe | 10 | 9519a | フランス | 18-AUG-12 00:00:00 | 650000
 sales_europe | 10 | 9519b | フランス | 18-AUG-12 00:00:00 | 650000
 sales_asia | 20 | 3788a | インド | 01-MAR-12 00:00:00 | 75000
 sales_asia | 20 | 3788a | パキスタン | 04-JUN-12 00:00:00 | 37500
 sales_asia | 20 | 3788b | インド | 21-SEP-12 00:00:00 | 5090
 sales_asia | 20 | 4519a | インド | 18-OCT-12 00:00:00 | 650000
 sales_asia | 20 | 4519b | インド | 02-DEC-12 00:00:00 | 5090
 sales_americas | 40 | 9519b | 米国 | 12-APR-12 00:00:00 | 145000
 sales_americas | 40 | 4577b | 米国 | 11-NOV-12 00:00:00 | 25000
 sales_americas | 30 | 7588b | カナダ | 14-DEC-12 00:00:00 | 50000
 sales_americas | 30 | 9519b | カナダ | 01-FEB-12 00:00:00 | 75000
 sales_americas | 30 | 4519b | カナダ | 08-APR-12 00:00:00 | 120000
 sales_americas | 40 | 3788a | 米国 | 5月12日-12 00:00:00 | 4950
 sales_americas | 40 | 4788a | 米国 | 23-SEP-12 00:00:00 | 4950
 sales_americas | 40 | 4788b | 米国 | 09-OCT-12 00:00:00 | 15000
(17行) 
n_americaテーブルのクエリは、americasパーティションに以前に格納されていた行がn_americaテーブルに移動されたことを示しています:
acctg=# SELECT tableid::regclass, * FROM n_america;
 tableoid | dept_no | part_no | 国 | 日付 | 金額
----------- ------------------------------------------ -------------------- -------------
 n_america | 40 | 9519b | 米国 | 12-APR-12 00:00:00 | 145000
(1行)