PolarDB for PostgreSQL を使用すると、マテリアライズドビューを作成または更新するための書き込みステートメントをバッチ処理できます。
前提条件
この機能は、次のエンジンを実行するPolarDB for PostgreSQLクラスターでサポートされています。
PostgreSQL 14 (バージョン14.9.15.0以降)
次のステートメントを実行して、PolarDB for PostgreSQLクラスターのマイナーバージョンを表示できます。
PostgreSQL 14
select version();
背景情報
マテリアライズドビューは、クエリ結果を含むデータベースオブジェクトです。 通常のビューとは異なり、マテリアライズドビューは、作成時にビュー定義とデータコピーの両方を格納します。 詳細については、「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;