다른 구체화 된보기에 의존하는 구체화보기가 있습니다.postgresql 9.5 - 부모가 동시에 새로 고침하는 동안 하위 구현보기를 잠급니다.
matviewA matviewB matviewC
\ | /
matviewX
부모 구체화 된 뷰를 동시에 동시에 새로 고치고 싶습니다. (아래의 그림과 같이 이것은 실제로 문제가되지 않습니다.) [현재 환경에서는 각 부모가 새로 고침하는 데 약 한 시간이 걸립니다.
psql -c "refresh materialized view concurrently matviewX" &
그것은 바로 실행하고 그들이에서 자녀를 고정하지 않기 때문에 부모가 상쾌 끝날 때까지 기다리지 않는다 : 나는 아이에 새로 고침 킥오프 그러나 경우]
psql -c "refresh materialized view concurrently matviewA" &
psql -c "refresh materialized view concurrently matviewB" &
psql -c "refresh materialized view concurrently matviewC" &
스스로 리프레쉬하는 동안 그들 자신은 이미 리프레쉬하고있다.
psql -c "lock matviewX in share mode; refresh materialized view concurrently matviewA" &
psql -c "lock matviewX in share mode; refresh materialized view concurrently matviewB" &
psql -c "lock matviewX in share mode; refresh materialized view concurrently matviewC" &
불행하게도, 당신이 구체화 된 뷰에 명시 적으로 잠금을 넣을 수 없습니다
나는 부모가 실행하는 동안 아이에 잠금을 넣어했습니다."동시"부모에서 사용하지 않으면 자식 구체화 된보기를 읽을 수 없게됩니다. (그러나 자식 새로 고침이 실행되기 전에 대기합니다.)
"psql -c"를 호출하는 (bash) 래퍼 스크립트에서 일부 잠금 관리를 작성할 수 있습니다. 아니면보다 정교한 타사 작업 스케줄러를 사용할 수도 있습니다. 더 쉬운 방법이 있기를 바랬습니다.
함수를 작성하고 모든 새로 고침을 해당 함수에 넣은 다음 수동 명시 적 잠금 관리에 임시 테이블을 사용할 수 있습니다.
어쨌든 자문 잠금을 사용하십시오.
제안 사항?
아하! 그건 트릭을 했어, 고마워! – rotten