2017-01-23 11 views
2

나는 Materialized View를 사용하는 PostgreSQL DB를 가지고 있습니다. 이러한 구체화 된보기를 새로 고치려고하면 문제가 발생합니다.병행 성이있는 구체화 된 뷰를 새로 고침

REFRESH MATERIALIZED VIEW product_cat_mview; 
REFRESH MATERIALIZED VIEW productsforproject; 

내 솔루션으로, 사용자가 업데이트 된 데이터를보고 할 때, 그는 웹 페이지에 "새로 고침 버튼"을 클릭해야하지만,이 응용 프로그램에서 약 2 분 로컬 연결에 (50에 대해 소요 서버) 그리고이 모든 시간 동안 사용자는 기다려야 만합니다.

는 지금은 자동으로 이러한 구체화보기 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

이 색인을 만들었습니다. "productsforproject (barcode, materialdescription ASC)에 고유 색인 만들기;" 하지만 메시지가 있습니다 : 오류 : 구체화 된 뷰 "public.productsforproject"를 동시에 새로 고칠 수 없습니다. 힌트 : 구체화 된 뷰의 하나 이상의 열에 WHERE 절이없는 고유 인덱스를 생성하십시오. –

+0

'CREATE UNIQUE INDEX ON public.productsforproject ...'와 같은 올바른 스키마를 지정해야 할 수도 있습니다. 또는 실수로 잘못된 데이터베이스에 생성했습니다. –