PolarDB for PostgreSQL では、マテリアライズドビューの作成または更新のための文のバッチ書き込みが可能です。
前提条件
この機能は、次のエンジンを実行する PolarDB for PostgreSQL クラスタでサポートされています。
PostgreSQL 14 (リビジョンバージョン 2.0.14.9.15.0 からリビジョンバージョン 2.0.14.13.27.0)
PostgreSQL 11 (リビジョンバージョン 2.0.11.15.37.0 以降)
PolarDB コンソールで、または 文を実行することで、クラスタのリビジョンバージョンを確認
SHOW polardb_version;できます。リビジョンバージョンが要件を満たしていない場合は、データベースエンジンごとに次のソリューションを使用できます。
PostgreSQL 11 の場合は、リビジョンバージョンをスペックアップします。
PostgreSQL 14 以降の場合は、PostgreSQL 14 リビジョンバージョン 2.0.14.13.28.0 以降が適用されている場合、バルクインポートインフラストラクチャ機能を使用します。
背景情報
マテリアライズドビューは、クエリ結果を含むデータベースオブジェクトです。通常のビューとは異なり、マテリアライズドビューは、作成時にビュー定義とデータコピーの両方を格納します。詳細については、「CREATE MATERIALIZED VIEW」をご参照ください。マテリアライズドビューのデータがビュー定義のデータと一致しない場合は、マテリアライズドビューを更新してデータの整合性を維持できます。詳細については、「REFRESH MATERIALIZED VIEW」をご参照ください。マテリアライズドビューは、本質的にビュー定義のクエリを事前に計算するため、クエリ中に再利用できます。
CREATE TABLE AS 文は、クエリの結果から新しいテーブルを定義します。テーブルは、クエリの出力列と同じ構造を持ちます。
SELECT INTO 文は、新しいテーブルを作成し、クエリによって計算されたデータを入力します。データはクライアントに返されません。新しいテーブルは、クエリの出力列とまったく同じ構造を持ちます。
仕組み
PostgreSQL カーネルは、マテリアライズドビューの作成 (CREATE MATERIALIZED VIEW) とマテリアライズドビューのリフレッシュ (REFRESH MATERIALIZED VIEW) の文、および CREATE TABLE AS 文と SELECT INTO 文を処理するために、同じコードロジックセットを使用します。これは、これらの文がデータベースレベルで同様のステップを実行するためです。通常、次のステップが含まれます。
データスキャン: ビュー定義または
CREATE TABLE AS文またはSELECT INTO文で指定されたクエリを実行して、条件を満たすデータをスキャンします。データ書き込み: 前のステップでスキャンされたデータを、新しいマテリアライズドビューまたは新しいテーブルに書き込みます。
データ書き込みステップを最適化するために、PolarDB for PostgreSQL はバッチ書き込みを導入しています。大量のデータを書き込む場合、メモリに蓄積された一定数のタプルが一度にテーブルまたはマテリアライズドビューに書き込まれます。これにより、WAL ログの記録のオーバーヘッドとページのロックの頻度が削減され、DDL の実行時間が大幅に短縮されます。
使用方法
polar_enable_create_table_as_bulk_insert パラメーターを ON に設定して、この機能を有効にします。デフォルト値は ON です。
SET polar_enable_create_table_as_bulk_insert TO ON;