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

ルールまたは通知を使用してマテリアライズドビューを自動的に更新します

    table1の各ステートメントの挿入/更新/削除/切り捨て後に、トリガーでビューを更新する必要があります およびtable2

    create or replace function refresh_mat_view()
    returns trigger language plpgsql
    as $$
    begin
        refresh materialized view mat_view;
        return null;
    end $$;
    
    create trigger refresh_mat_view
    after insert or update or delete or truncate
    on table1 for each statement 
    execute procedure refresh_mat_view();
    
    create trigger refresh_mat_view
    after insert or update or delete or truncate
    on table2 for each statement 
    execute procedure refresh_mat_view();
    

    このようにして、マテリアライズド・ビューは常に最新です。この単純な解決策は、頻繁な挿入/更新や散発的な選択では受け入れがたい場合があります。あなたの場合(1日に2回程度変更されることはめったにありません)、理想的にはニーズに適合します。

    遅延更新を実現するには マテリアライズドビューの場合、次のいずれかの機能が必要です。

    • 非同期トリガー
    • 選択する前にトリガーする
    • 前に選択するルール

    Postgresにはそれらがないため、明確なはないようです。 postgresソリューション。

    これを考慮して、mat_viewでのselectのラッパー関数を検討します。例:

    CREATE OR REPLACE FUNCTION select_from_mat_view(where_clause text)
    RETURNS SETOF mat_view AS $body$
    BEGIN
      -- here is checking whether to refresh the mat_view
      -- then return the select:
      RETURN QUERY EXECUTE FORMAT ('SELECT * FROM mat_view %s', where_clause);
    END;
    $body$ LANGUAGE plpgsql;
    

    それが実際に受け入れられるかどうかは、私が知らない詳細に依存します。



    1. Oracleでのカンマ区切り値の分割

    2. MYSQL自己結合はどのように機能しますか?

    3. Debian7でphpMyAdminを使用してMySQLをインストールする方法

    4. Plan Explorer 3.0ウェビナー–サンプルとQ&A