PostgreSQL定時刷新物化視圖的一種簡單方法


PostgreSQL 9.3開始支持物化視圖,9.4又增加了非阻塞的CONCURRENTLY選項,但REFRESH時卻不支持類似START WITH ... NEXT ...的定時刷新選項。

如何實現定時刷新物化視圖?百度的結果主要是以下三種:

  • 借助操作系統,如Linux/Unix的crontab或Windows的定時任務;
  • 借助插件pgAgent;
  • 使用觸發器,一般為語句級(... FOR EACH STATEMENT ...)。

近日接觸到\watch命令,發現了一種新的刷新物化視圖的方法。

不多解釋,直接上示例代碼:

-- 創建物化視圖
CREATE MATERIALIZED VIEW MAX_ID_MVIEW 
AS
  SELECT PART_ID, MAX(ID)  MAX_ID
  FROM PART_DETAIL GROUP BY PART_ID;
  
-- 如果刷新時不帶CONCURRENTLY則無需創建唯一索引
CREATE UNIQUE INDEX IDX_MAX_ID ON MAX_ID_MVIEW(PART_ID);

-- 利用watch命令每120s刷新一次物化視圖
REFRESH MATERIALIZED VIEW CONCURRENTLY MAX_ID_MVIEW; \watch 120

經測試有效,但缺點是需保持在psql窗口一直運行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM