一份数据库结果能够再次被读取,并不表示每次读取都重新计算了原始数据。PostgreSQL 17的物化视图说明从这个关系切入:materialized view像普通视图一样使用规则系统,却把结果以类似表的形式持久保存。[1] 对报表资料而言,结果来自哪里与当前保存了什么,是需要同时交代的两项内容。
官方先将物化视图与依据查询建立普通表的情形作比较。物化视图保留了用于生成它的查询,保存方式与视图查询相同;同时,其内容不能在随后被直接更新。保留定义,使文档所述的重新生成数据仍有依据。这与只知道某处留有一组结果不同,资料中还存在一份解释结果怎样产生的查询定义。
当查询引用物化视图时,数据直接从物化视图返回,类似读取表;相应规则只在填充物化视图时使用。[1] 这给“查询一个物化视图”划出了具体含义:读者取得的是它已经保存的结果,而不是仅凭对象名字就证明底层来源刚被重新读取。本文没有执行查询或刷新,也不把这个机制转述成特定系统的运行记录。
结果可以留存,也就带来新鲜度问题。官方明确说数据并不总是当前的,同时指出某些用途并不要求最新数据。原文以历史销售图表为例:按销售人员和日期汇总,排除当天尚不完整的数据,再设想通过夜间更新统计供看板使用。这里的时间范围属于例子的数据定义,不能在摘要里省成“全部销售数据”。
这份例子将两个时点联系起来:一边是源记录所涉及的日期,另一边是保存结果被重新生成的时点。若一张学习笔记写着“截至昨天的汇总”,还需要知道这句话来自查询条件,还是来自某次真实生成记录。两项可以共同解释结果范围,但仅有查询定义并不能替一次尚未核验的实际刷新补上时间。
因此,阅读物化视图相关交接时,可以分别记录对象保存的结果范围、其背后的查询定义,以及实际资料是否提供重新生成的时点。这是对官方机制的资料分析,没有安排定时任务、修改生产查询或判断报表金额。文档后面的外部数据访问与性能测量示例未用于本文,读取已保存结果也不被概括为任何场景必然更快。
本篇限定PostgreSQL 17第39.3节的定义与销售汇总教学文字。来源首次发布日期未确认,页首新闻和页尾版权年份不能替本节提供首发时间。物化视图把结果留存和生成定义同时保存下来,理解两者的分工,才能准确说明一份可读取结果的来源与时间边界。
信息来源
本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。