マテリアライズドビューを使用する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;
一意のインデックスを作成する必要があると文句を言います。グーグルで見つけたインデックスやユニークインデックスなどを作成しようとしましたが、それでも「ユニークインデックスを作成してください」というメッセージが表示されます。
マテリアライズドビュー自体に一意のインデックスを作成する必要があります。
これは次のようになります。
CREATE UNIQUE INDEX ON productsforproject (id);
id
を、適切な一意のキー列またはそのような列の(コンマ区切りの)組み合わせに置き換えます。