Обновить материализованные представления с помощью concurrency

У меня есть PostgreSQL DB, где я использую материализованные представления. Проблема возникает, когда я пытаюсь обновить эти материализованные представления.

REFRESH MATERIALIZED VIEW product_cat_mview;
REFRESH MATERIALIZED VIEW productsforproject;

Мое решение заключается в том, что когда пользователь хочет видеть обновленные данные, он должен нажать кнопку "Обновить" на веб-странице, но это занимает около 50 секунд (на локальном подключении и около 2 минут с сервера приложений) и все на этот раз пользователь должен подождать, что плохо.

Теперь я должен создать решение для автоматического обновления этих материализованных представлений каждые 10 минут. Я создал Java-решение с многопоточным процессом. Но у меня есть одна проблема.

Первый запрос

REFRESH MATERIALIZED VIEW CONCURRENTLY product_cat_mview;

работает правильно, но второй

REFRESH MATERIALIZED VIEW CONCURRENTLY productsforproject;

жалуется, что мне нужно создать уникальный индекс. Я попытался создать индекс, уникальный индекс и т.д., Которые я нашел в google, но я до сих пор получаю сообщение "Создать уникальный индекс".

Ответ 1

Вам нужно будет создать уникальный индекс на материализованном представлении.

Это будет выглядеть так:

CREATE UNIQUE INDEX ON productsforproject (id);

Замените id подходящим уникальным ключевым столбцом или комбинацией из таких столбцов (с разделителями-запятыми).