2014-01-16 2 views
12

일부보고에 price_changes이라는 구체화 된보기가 있습니다. 또한 refresh materialized view price_changes과 함께 구체화 된보기를 새로 고치는 크론 작업이 있습니다. 모든 것이 훌륭하게 작동합니다.구체화 된보기의 마지막 새로 고침 시간 확인

보고서를 보는 사용자에게 "X는 현재 데이터입니다"라는 메시지를 전합니다. cron을 실행할 때 어딘가에 저장할 수 있지만 postgres는 이미이 메타 데이터를 어딘가에 저장합니까?

+0

자세한 내용은 다음 링크를 참조하십시오. https://dba.stackexchange.com/q/58214/104401 – Wildcard

답변

9

9.3.4 버전에서이 기능을 제공하는 시스템에는 아무 것도 없다고 생각합니다. 마지막 새로 고침 날짜를 제공해야 할 때 구체화 된보기의 데이터가 새로 고쳐 질 때까지 변경되지 않으므로 구체화 된보기의 선택 쿼리에 'last_refresh'라는 열을 추가합니다.

정보가 저장된 경우 SQL 테이블에 대한 액세스 권한을 SQL 사용자에게 부여하지 않으려는 보안상의 이유로이 방법을 선호합니다.

  1. CURRENT_DATE
  2. now()

그냥 날짜 : 날짜와 시간

CREATE MATERIALIZED VIEW mv_address AS 
SELECT *, CURRENT_DATE AS last_refresh FROM address;

:

당신은 시간을 필요로하는 경우, 당신이 중 하나를 사용할 수 있습니다 따라

CREATE MATERIALIZED VIEW mv_address AS 
SELECT *, now() AS last_refresh FROM address;

업데이트 2017년 2월 17일 :

PostgreSQL의 버전 9.4+ 지금 CONCURRENTLY 옵션이 포함되어 있습니다. REFRESH MATERIALIZED VIEW CONCURRENTLY 옵션을 사용하는 경우 @Smudge가 주석에 표시 한 내용을 알고 있어야합니다. 이것은 실제로 크고 자주 업데이트되는 데이터 세트의 경우에만 문제가됩니다. 데이터 세트가 작거나 드물게 업데이트되는 경우 잘 수행해야합니다.

+8

헤드 업 :이 방법을 사용하면 매번 모든 행을 업데이트 할 때 '새로 고치기 뷰 동시 사용'이 실행됩니다. 빈번하지 않은 리프레시가있는 더 작은 데이터 세트의 경우 큰 문제는 아니지만 많은 양의 데이터 및/또는 빈번한 업데이트의 경우 'DELETE'및 INSERT의 비율이 autovacuum 데몬의 테이블을 VACUUM하는 능력을 추월하여 기본 쿼리 성능이 급한 것으로 나타났습니다. – Smudge

+6

실제 경험에서 말하자면 Smudge는 데이터베이스가 죽은 튜플의 산을 다루는 데 100 % 시간을 소비하고 구체화 된보기를 삭제하고 다시 생성 할 때까지 복구 할 수 없을 때까지 눈덩이를 매우 쉽게 참조합니다. 이 솔루션을 사용할 때는 각별히주의하십시오. – Jschiff