2017-01-23 19 views
2

私はマテリアライズド・ビューを使用するPostgreSQL DBを持っています。 これらのマテリアライズド・ビューをリフレッシュしようとすると問題が発生します。同時実行性を備えたマテリアライズド・ビューをリフレッシュ

REFRESH MATERIALIZED VIEW product_cat_mview; 
REFRESH MATERIALIZED VIEW productsforproject; 

私のソリューションは、ユーザーが更新されたデータを見たいと思ったときに、彼はウェブページ上の「更新ボタン」をクリックするべきであるが、これはローカル接続で1950(およびアプリケーションから約2分ほどかかりますサーバー)、このすべての時間はユーザーが待たなければならない、それは良くありません。

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

最初のクエリ

REFRESH MATERIALIZED VIEW CONCURRENTLY product_cat_mview; 

作品正しいが、2番目の

REFRESH MATERIALIZED VIEW CONCURRENTLY productsforproject; 

は、私は一意のインデックスを作成する必要があると文句を言います。私はGoogleで見つけたインデックス、ユニークなインデックスなどを作成しようとしましたが、 "ユニークインデックスを作成する"というメッセージが表示されます。

+0

リフレッシュを1つずつ実行するとこのエラーが発生しますか? –

+0

私は30秒の遅れでそれらを1つずつ実行します。 –

答えて

4

マテリアライズド・ビュー自体に一意索引を作成する必要があります。

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

CREATE UNIQUE INDEX ON productsforproject (id); 

適したユニークキー列または、そのような列の(カンマ区切り)の組み合わせでidを交換してください。

+0

このインデックスを作成しました。 "productsforproject(barcode、materialdescription ASC)に一意索引を作成する;"しかし、メッセージがあります。エラー:マテリアライズド・ビュー "public.productsforproject"を同時にリフレッシュできません。 ヒント:マテリアライズド・ビューの1つ以上の列にWHERE句を指定しない一意索引を作成します。 –

+0

'CREATE UNIQUE INDEX ON public.productsforproject ...'のような正しいスキーマを指定する必要があるかもしれません。または間違ったデータベースに誤って作成したことがあります。 –

関連する問題