当前位置: 首页 > news >正文

PostgreSQl 物化视图

物化视图(Materialized View)是 PostgreSQL 提供的一个扩展功能,它是介于视图和表之间的一种对象。

物化视图和视图的最大区别是它不仅存储定义中的查询语句,而且可以像表一样存储数据。物化视图和表的最大区别是它不支持 INSERT、UPDATE、DELETE 以及 MERGE 语句,只能通过刷新物化视图进行数据的更新。

物化视图通过提前运行并存储查询结果,通常用于查询优化、数据仓库、数据集成等场景。

另外,PostgreSQL 目前不支持物化视图的实时更新,因此物化视图中的数据通常不是最新数据。

 一、创建测试数据

PostgreSQL 使用 CREATE MATERIALIZED VIEW 语句创建视图:

CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] name
AS query
[ WITH [ NO ] DATA ];

其中,IF NOT EXISTS 可以避免重复创建一个已经存在的物化视图时产生错误;name 是物化视图的名称;query 是物化视图的查询语句。

WITH DATA 表示创建时填充物化视图中的数据,这个是默认选项;WITH NO DATA 表示创建时不填充数据,此时无法查询物化视图中的数据,需要执行 REFRESH MATERIALIZED VIEW 命令刷新物化视图数据之后才能查询。

-- 老师表
CREATE TABLE Teachers (  TeacherID INT NOT NULL PRIMARY KEY,  FirstName VARCHAR(50) NOT NULL,  LastName VARCHAR(50) NOT NULL  
);-- 课程表
CREATE TABLE Courses (  CourseID INT NOT NULL PRIMARY KEY,  CourseName VARCHAR(100) NOT NULL,  TeacherID INT,  FOREIGN KEY (TeacherID) REFERENCES Teachers(TeacherID)  
);-- 测试数据
INSERT INTO Teachers (TeacherID, FirstName, LastName) VALUES (1, 'John', 'Doe');  
INSERT INTO Teachers (TeacherID, FirstName, LastName) VALUES (2, 'Jane', 'Smith');INSERT INTO Courses (CourseID, CourseName, TeacherID) VALUES (1, 'Mathematics', 1);  
INSERT INTO Courses (CourseID, CourseName, TeacherID) VALUES (2, 'Science', 2);  
INSERT INTO Courses (CourseID, CourseName, TeacherID) VALUES (3, 'History', 1);select * from Teachers;
select * from Courses;CREATE MATERIALIZED VIEW Teachers_Courses_View AS 
SELECTt.FirstName || ' ' ||t.LastName as teacher_name,c.CourseName as course_name
FROMCourses c LEFT JOIN Teachers T ON C.TeacherID = T.TeacherID

二、创建物化视图:学生-课程-老师的关联关系


CREATE MATERIALIZED VIEW Teachers_Courses_View AS 
SELECTt.FirstName || ' ' ||t.LastName as teacher_name,c.CourseName as course_name
FROMCourses c LEFT JOIN Teachers T ON C.TeacherID = T.TeacherID

 查询数据

二、创建物化视图的索引

物化视图可以像表一样支持索引,实现约束和查询优化。

数据重复这里不能创建索引,这些测试数据太简单了,这里做个介绍即可。

三、刷新物化视图

PostgreSQL 物化视图不会自动刷新数据,需要手动执行 REFRESH MATERIALIZED VIEW 语句。

测试插入数据,不刷新视图则不会更新数据,刷新之后数据就出来了

INSERT INTO Teachers (TeacherID, FirstName, LastName) VALUES (3, '尼古拉斯', '张三');  
INSERT INTO Courses (CourseID, CourseName, TeacherID) VALUES (4, '论如何无责犯罪', 3);REFRESH MATERIALIZED VIEW Teachers_Courses_View;

四、修改物化视图

ALTER MATERIALIZED VIEW 语句可以修改物化视图的一些属性,例如名称、字段名等:

alter MATERIALIZED view Teachers_Courses_View rename teacher_name to tt_name;
alter MATERIALIZED view Teachers_Courses_View rename to Teachers_Courses_View_10086;

五、删除物化视图

PostgreSQL 使用 DROP MATERIALIZED VIEW 语句删除物化视图:

DROP MATERIALIZED VIEW Teachers_Courses_View_10086;

 

物化视图介绍就这些了,欢迎斧正交流!!!

http://www.lryc.cn/news/399787.html

相关文章:

  • Win10工具:批量word转png图片
  • 期货量化交易客户端开源教学第八节——TCP通信服务类
  • bi项目笔记
  • 金蝶云苍穹-插件开发(四)GPT开发相关插件
  • 【机器学习】精准农业新纪元:机器学习引领的作物管理革命
  • 一键掌握天气动态 - 基于Vue和高德API的实时天气查询
  • PostgreSQL修改最大连接数
  • C# SqlSugar 如何使用Sql语句进行查询,并带参数进行查询,防注入
  • slf4j日志框架和logback详解
  • 解决@Data与@Builder冲突的N种策略
  • 一文看懂LUT(Lookup Table)查找表
  • 06 人以群分 基于邻域的协同过滤算法
  • SQL性能下降的原因
  • js的原型
  • FastAPI 学习之路(三十七)元数据和文档 URL
  • C 语言结构体
  • MySQl高级篇-主从复制
  • JMeter案例分享:通过数据验证的错误,说说CSV数据文件设置中的线程共享模式
  • 数学建模·Topsis优劣解距离法
  • 数学建模中常用的数据处理方法
  • C嘎嘎:函数模版和类模版
  • 使用 Apache Pulsar 构建弹性可扩展的事件驱动应用
  • 【国产开源可视化引擎Meta2d.js】视频
  • 零信任网络安全
  • Python酷库之旅-第三方库Pandas(022)
  • 数据建设实践之大数据平台(一)准备环境
  • VUE2用elementUI实现父组件中校验子组件中的表单
  • 人工智能算法工程师(中级)课程9-PyTorch神经网络之全连接神经网络实战与代码详解
  • UDP网络通信(发送端+接收端)实例 —— Python
  • 从零开始实现大语言模型(五):缩放点积注意力机制