このトピックでは、クリックでデータをコールドストレージにダンプする方法を説明します。
背景情報
ALTER TABLE tblname SET TABLESPACE ossステートメントを使用すると、1つのオブジェクトをダンプできます。 ただし、テーブルとその複数のインデックス、またはパーティションテーブルとその多数のサブパーティションテーブルをダンプするには、ALTERステートメントを複数回実行する必要があります。 このプロセスは面倒であるだけでなく、エラーを見逃しがちです。 この問題を解決するために、 PolarDB for PostgreSQL (Compatible with Oracle) には、データをコールドストレージにダンプするための一連の補助関数が用意されています。
polar_osfs_toolkit拡張機能の作成
CREATE EXTENSION IF NOT EXISTS polar_osfs_toolkit;関数
polar_alter_relation_to_oss
この関数は、非パーティションテーブル、サブパーティションテーブル、インデックスなどのオブジェクトをOSSストレージにダンプします。
構文
void polar_alter_relation_to_oss (text relname);
Parameters
パラメーター | 説明 |
relname | オブジェクト (テーブルとインデックス) の名前。 |
非パーティションテーブルまたはサブパーティションテーブルの場合、関数は、インデックスの元の格納場所を維持しながら、テーブルデータをOSSにダンプします。
パーティションテーブルの場合は、
polar_alter_partitioned_to_ossを使用します。インデックスの場合、関数はインデックス内のデータをOSSにダンプします。
polar_alter_relation_to_oss_with_インデックス
この関数は、オブジェクト (非パーティションテーブルとサブパーティションテーブル) とそのインデックスデータをOSSにダンプします。
構文
void polar_alter_relation_to_oss_with_indexes (text relname);
Parameters
パラメーター | 説明 |
relname | テーブル名またはインデックス名。 |
非パーティションテーブルまたはサブパーティションテーブルの場合、関数はテーブルとそのすべてのインデックスをOSSにダンプします。
パーティションテーブルの場合は、
polar_alter_partitioned_to_ossを使用します。インデックスの場合、関数はインデックス内のデータのみをOSSにダンプします。これは
polar_alter_relation_to_ossに似ています。
polar_alter_relation_to_oss_カスケード
この関数は、すべてのオブジェクト (テーブルとインデックス) とその下位オブジェクトをOSSにダンプします。
構文
void polar_alter_relation_to_oss_cascade (text relname);
Parameters
パラメーター | 説明 |
relname | テーブル名またはインデックス名。 |
非パーティションテーブルまたはサブパーティションテーブルの場合、関数はテーブルとそのすべてのインデックスをOSSにダンプします。
パーティションテーブルの場合、関数はテーブル、そのグローバルインデックス、およびサブパーティションテーブルとそのインデックスをOSSにダンプします。
インデックスの場合、関数はインデックス内のデータをOSSにダンプします。これは
polar_alter_relation_to_ossに似ています。
polar_alter_partitioned_to_oss
この関数は、パーティションテーブルをOSSにダンプします。
構文
void polar_alter_partitioned_to_oss (text relname);
Parameters
パラメーター | 説明 |
relname | パーティションテーブル (親テーブル) の名前。 |
この関数はパーティションテーブルにのみ適用され、サブパーティションテーブルとそのインデックスを変更せずに、パーティションテーブルのみをOSSにダンプします。 パーティションテーブルのデータは各サブパーティションテーブルに格納されるため、この関数はデータの格納場所を変更せず、パーティションテーブルのデフォルトの格納場所をOSSに設定するだけです。
polar_alter_subpartition_to_oss
この関数は、パーティションテーブルの部分サブパーティションテーブルをOSSにダンプし、格納場所が変更されないサブパーティションテーブルの数を指定します。
構文
void polar_alter_subpartition_to_oss (text relname, int reserved_subparts_cnt);
Parameters
パラメーター | 説明 |
relname | パーティションテーブル (親テーブル) の名前。 |
reserved_subparts_cnt | 格納場所が変更されていないサブパーティションテーブルの数。 |
この関数は、パーティションテーブル、およびパーティションテーブルとそのサブパーティションテーブルをOSSにダンプする場合にのみ適用されます。 サブパーティションテーブルのインデックスデータの格納場所は変更されません。
reserved_subparts_cntの値が0の場合、関数はすべてのサブパーティションテーブルをOSSにダンプします。reserved_subparts_cntの値が0より大きい場合、関数は保持時間に基づいてサブパーティションテーブルをソートします。reserved_subparts_cntサブパーティションテーブルの保存場所は、保持時間の昇順に変更されず、他のサブパーティションテーブルはOSSにダンプされます。
polar_alter_subpartition_to_oss_with_インデックス
この関数は、パーティションテーブルの部分サブパーティションテーブルをOSSにダンプし、格納場所が変更されないサブパーティションテーブルの数を設定します。
構文
void polar_alter_subpartition_to_oss_with_indexes (text relname、int reserved_subparts_cnt);
Parameters
パラメーター | 説明 |
relname | パーティションテーブル (親テーブル) の名前。 |
reserved_subparts_cnt | 格納場所が変更されていないサブパーティションテーブルの数。 |
この関数はパーティションテーブルにのみ適用され、サブパーティションテーブルとインデックスをOSSにダンプします。
reserved_subparts_cntの値が0の場合、関数はすべてのサブパーティションテーブルとそのインデックスをOSSにダンプします。reserved_subparts_cntの値が0より大きい場合、関数は保持時間に基づいてサブパーティションテーブルをソートします。reserved_subparts_cntサブパーティションテーブルの保存場所は、保持時間の昇順に変更されず、他のサブパーティションテーブルはOSSにダンプされます。
polar_alter_subpartition_to_oss_interval
この関数は、パーティションテーブルの過去のサブパーティションテーブルをOSSにダンプします。
構文
void polar_alter_subpartition_to_oss_interval (text relname, interval tm_inter_value, boolean by_db_time default false);
Parameters
パラメーター | 説明 |
relname | パーティションテーブル (親テーブル) の名前。 |
tm_inter_value | 過去のサブパーティションテーブルを決定するために使用される時間間隔。 例: 1日、1月、および5時間。 詳細については、「間隔入力」をご参照ください。 |
by_db_time | このパラメーターは、
|
この関数は、時間ベースのパーティションテーブルにのみ適用され、履歴サブパーティションテーブルとそのインデックスをOSSにダンプします。
pg_cron拡張機能を一緒に使用して、パーティション分割テーブルデータのコールドストレージへのアーカイブをスケジュールできます。 詳細については、「」をご参照ください。「パーティション分割テーブルデータのコールドストレージへのアーカイブのスケジュール」をご参照ください。
データベースでは、月は30日、年は365.25日です。 したがって、31日の月とうるう年に対処するには、より大きな時間間隔の値を指定する必要があります。
例
-- Create tables that are partitioned by day.
CREATE TABLE partition_day (
city_id int not null,
logdate date not null,
peaktemp int,
unitsales int
) PARTITION BY RANGE (logdate);
CREATE TABLE partition_day_y2024m06d01 PARTITION OF partition_day
FOR VALUES FROM ('2024-06-01') TO ('2024-06-02');
CREATE TABLE partition_day_y2024m06d02 PARTITION OF partition_day
FOR VALUES FROM ('2024-06-02') TO ('2024-06-03');
CREATE TABLE partition_day_y2024m06d03 PARTITION OF partition_day
FOR VALUES FROM ('2024-06-03') TO ('2024-06-04');
-- Set the time interval to 1 day.
select polar_alter_subpartition_to_oss_interval('partition_day', '1 day'::interval);
-- The partition_day_y2024m06d01 and partition_day_y2024m06d02 subpartitioned tables and their indexes are all dumped to OSS.