sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLマテリアライズドビュー

    マテリアライズドビューを使用すると、複雑なクエリの結果を物理的に保存し、定期的に更新できます。したがって、レポートやビジネスインテリジェンスのために迅速なデータアクセスが必要な場合に役立ちます。 PostgreSQLでマテリアライズドビューを作成する方法は次のとおりです。


    PostgreSQLビューとマテリアライズドビュー

    マテリアライズドビューはPostgreSQLビューに似ており、SQLクエリを保存して後で呼び出すことができます。ただし、PostgreSQLビューでは、SQLクエリのみを保存でき、その結果は保存できません。マテリアライズドビューを使用すると、クエリ結果を物理的に保存し、定期的に更新できます。その結果、マテリアライズドビューはPostgreSQLビューよりも高速です。

    ボーナスリード:PostgreSQLでグループごとに最後の行を取得する方法


    PostgreSQLでマテリアライズドビューを作成する方法

    以下に示すように、CREATEMATERIALIZEDVIEWステートメントを使用してPostgreSQLでマテリアライズドビューを作成できます。

    CREATE MATERIALIZED VIEW view_name
    AS query 
    WITH [NO] DATA;

    上記のステートメントでは、 view_nameに言及する必要があります クエリも同様です その結果をマテリアライズドビューに保存します。

    最後に、作成時にビューにデータをロードする場合は、WITHDATAオプションを指定することもできます。 WITH NO DATAと指定すると、ビューに読み取り不可のフラグが付けられ、データをビューにロードするまでビューからデータをクエリできなくなります。

    ボーナス読み取り:PostgreSQL作成関数


    PostgreSQLマテリアライズドビューの更新

    図のように、REFRESH MATERIALIZED VIEWステートメントを使用して、データをマテリアライズド・ビューにロードできます。

    REFRESH MATERIALIZED VIEW view_name

    上記のステートメントを使用して、マテリアライズド・ビューをリフレッシュすることもできます。

    REFRESH MATERIALIZED VIEWステートメントはクエリデータをロックするため、クエリを実行できないことに注意してください。 CONCURRENTLYオプションを使用して回避できます

    REFRESH MATERIALIZED VIEW CONCURRENTLY view_name

    この場合、PostgreSQLは一時的なビューを作成し、それを元のビューと比較して、必要な挿入、更新、および削除を行います。その結果、CONCURRENTLYオプションは、固有の索引を持つマテリアライズド・ビューでのみ使用可能です。

    マテリアライズド・ビューを定期的に自動リフレッシュするには、自動化されたスクリプトを介してREFRESHMATERIALIZEDVIEWを実行できます。

    ボーナスリード:PostgreSQL Create Schema


    マテリアライズドビューを削除する

    DROP MATERIALIZED VIEWステートメントを使用して、マテリアライズド・ビューを削除できます。

    DROP MATERIALIZED VIEW view_name


    マテリアライズドビューの例

    マテリアライズドビューの例をいくつか見てみましょう。

    sample_viewというマテリアライズドビューを作成するためのクエリは次のとおりです。

    postgres=# create materialized view sample_view
               as select * from sales
               with no data;
    として作成します

    上記のクエリでは、WITH NO DATAオプションについて説明したため、ビューにはデータがなく、クエリを実行しようとするとエラーが発生します。

    postgres=# select * from sample_view;
    ERROR: materialized view "sample_view" has not been populated
    HINT: Use the REFRESH MATERIALIZED VIEW command.

    次に、ビューを更新してデータをロードし、ビューに対して上記のクエリを実行します。

    postgres=# refresh materialized view sample_view;
    REFRESH MATERIALIZED VIEW
    
    postgres=# select * from sample_view;
    order_date | sale
    ------------+------
    2020-04-01 | 210
    2020-04-02 | 125
    2020-04-03 | 150
    2020-04-04 | 230
    2020-04-05 | 200
    2020-04-10 | 220
    2020-04-06 | 250
    2020-04-07 | 215
    2020-04-08 | 300
    2020-04-09 | 250

    上記のように、クエリを再度実行すると、結果が得られます。

    うまくいけば、データベースのマテリアライズドビューを簡単に作成できるようになりました。

    Ubiqを使用すると、データを数分で簡単に視覚化し、リアルタイムのダッシュボードで監視できます。今日それを試してみてください!

    1. LIKE演算子がSQLiteでどのように機能するか

    2. ストアドプロシージャのパラメータとしてリストを渡すにはどうすればよいですか?

    3. テーブルの外部キーを一覧表示する方法

    4. SQL Server:プールされた接続間での分離レベルのリーク