PolarDB for PostgreSQL (Compatible with Oracle) では、TRUNCATE PARTITION を使用すると、パーティションまたはサブパーティションの構造を維持したまま、そのすべての行を削除できます。大量のデータを迅速にクリアし、ディスク領域を即座に再確保する必要がある場合にご利用ください。大規模なデータセットに対しては、DELETE よりも高速です。
構文
ALTER TABLE <table_name> TRUNCATE PARTITION <partition_name>;
ALTER TABLE <table_name> TRUNCATE SUBPARTITION <subpartition_name>;TRUNCATE と DELETE の違い
TRUNCATE および DELETE は、対象のパーティションからすべての行を削除しますが、TRUNCATE の方が通常は高速であり、領域再確保の動作も異なります。
| 項目 | TRUNCATE | DELETE |
|---|---|---|
| パフォーマンス | 行単位のスキャンを行わず、データページを直接解放 | 行を1件ずつスキャンして削除 |
| ディスク領域 | 即座に再確保可能。追加の VACUUM は不要 | 領域再確保には VACUUM の実行が必要となる場合あり |
例
以下の例では、ハッシュパーティション化されたテーブルを作成し、パーティション p1 を切り捨てます。
テーブルの作成:
CREATE TABLE hash_partitions_sales (deptno NUMBER, deptname VARCHAR(32))
PARTITION BY HASH(deptno)
(PARTITION p1, PARTITION p2,
PARTITION p3, PARTITION p4, PARTITION p5);パーティションの切り捨て:
ALTER TABLE hash_partitions_sales TRUNCATE PARTITION p1;