共计 542 个字符,预计需要花费 2 分钟才能阅读完成。
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 窗口一直运行。
:
正文完
星哥玩云-微信公众号