3
2つのプロセスが同時にマテリアライズドビューを同時にリフレッシュしようとするとどうなりますか?
ドキュメントによると: マテリアライズドビューの同時選択をロックアウトせずに、マテリアライズドビューを同時に更新します。(...) ...その他のコンテンツ... でも、このオプションを使用して一度に一つだけREFRESHは、任意のに対して実行可能 マテリアライズド・ビューは1。 私が持っていたそれをリフレッシュするマテリアライズド・ビューの最後のリフレッシュ時間を確認機能をして、60秒以上が経過した場合、それがでしょう。 しかし、2つの別々のプロセスから同時にマテリアライズドビューを更新しようとするとどうなりますか?彼らはキューに入れますか、それともエラーを上げますか? MATERIALIZED VIEWが更新されていることを検出して、触れないようにする方法はありますか? 現在、私は(設定リフレッシュする前に、テーブルのレコードを移入するために頼ってきたrefreshingしtrue)、その後にそれを設定するfalseプロセスが終了したとき。 EXECUTE 'INSERT INTO refresh_status (last_update, refreshing) VALUES (clock_timestamp(), true) RETURNING id') INTO refresh_id; EXECUTE 'REFRESH MATERIALIZED VIEW CONCURRENTLY my_mat_view'; EXECUTE 'UPDATE refresh_status SET refreshing=false WHERE id=$1' USING refresh_id; その後、このプロシージャを呼び出すたびに、最新の値last_updateとそのrefreshing値を確認します。refreshingtrueの場合、マテリアライズドビューを更新しようとしないでください。 EXECUTE 'SELECT extract(epoch FROM now() - (last_update))::integer, refreshing FROM refresh_status ORDER …