web-dev-qa-db-ja.com

マテリアライズドビューを同時実行で更新する

マテリアライズドビューを使用するPostgreSQLDBがあります。これらのマテリアライズドビューを更新しようとすると、問題が発生します。

REFRESH MATERIALIZED VIEW product_cat_mview;
REFRESH MATERIALIZED VIEW productsforproject;

私の解決策は、ユーザーが更新されたデータを表示したい場合は、Webページの[更新]ボタンをクリックする必要がありますが、これには約50秒(ローカル接続で、アプリケーションサーバーから約2分)かかります。ユーザーは待たなければなりませんが、これは良くありません。

次に、これらのマテリアライズドビューを10分ごとに自動的に更新するソリューションを作成する必要があります。マルチスレッドを使用してJavaソリューションを作成しました。しかし、1つの問題があります。

最初のクエリ

REFRESH MATERIALIZED VIEW CONCURRENTLY product_cat_mview;

正しく動作しますが、2番目

REFRESH MATERIALIZED VIEW CONCURRENTLY productsforproject;

一意のインデックスを作成する必要があると文句を言います。グーグルで見つけたインデックスやユニークインデックスなどを作成しようとしましたが、それでも「ユニークインデックスを作成してください」というメッセージが表示されます。

10

マテリアライズドビュー自体に一意のインデックスを作成する必要があります。

これは次のようになります。

CREATE UNIQUE INDEX ON productsforproject (id);

idを、適切な一意のキー列またはそのような列の(コンマ区切りの)組み合わせに置き換えます。

14
Laurenz Albe