2017-01-23 4 views
2

У меня есть 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, но я до сих пор получаю сообщение «Создать уникальный индекс».

+0

Возникает ли эта ошибка при запуске обновления один за другим? –

+0

Я запускаю их один за другим с задержкой в ​​30 секунд. –

ответ

4

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

Это будет выглядеть следующим образом:

CREATE UNIQUE INDEX ON productsforproject (id); 

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

+0

Я создал этот индекс. «СОЗДАТЬ УНИКАЛЬНЫЙ ИНДЕКС НА ПРОДУКТЫ ДЛЯ ПРОЕКТА (штрих-код, материальная реклама ASC); Но у меня есть сообщение: ОШИБКА: невозможно обновить материализованное представление «public.productsforproject» одновременно Совет: создайте уникальный индекс без предложения WHERE на одном или нескольких столбцах материализованного представления. –

+0

Возможно, вам нужно указать правильную схему, например 'CREATE UNIQUE INDEX ON public.productsforproject ...'. Или вы ошибочно создали его в неправильной базе данных. –

Смежные вопросы