当前位置: 首页 > 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;

 

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 秒懂设计模式--学习笔记(9)【结构型-装饰器模式】
  • nginx正向代理、反向代理、负载均衡
  • 【C++】构造函数详解
  • 机器人及其相关工科专业课程体系
  • 批量提取PDF指定区域内容到 Excel , 根据PDF文件第一行文字来自动重命名v1.3-附思路和代码实现
  • qt 返回上级页面
  • Java如何使用 HttpClientUtils 发起 HTTP 请求
  • C++(week11): C++基础 第六章:关联式容器 set、map
  • 2 Java的基本程序设计结构(基本语法1)
  • 外包干了1个月,技术明显退步。。。
  • SparkStreaming--scala
  • Apache访问机制配置
  • 阿里通义音频生成大模型 FunAudioLLM 开源
  • el-popover或el-popconfirm中button不展示问题
  • 从零开始学习c++全套通关系列(第二章)万字总结,建议收藏!
  • [译]如何构建服务器端web组件,为何要构建?
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • classpath对获取配置文件的影响
  • cookie和session
  • Django 博客开发教程 16 - 统计文章阅读量
  • ES学习笔记(12)--Symbol
  • HTTP中GET与POST的区别 99%的错误认识
  • iOS | NSProxy
  • Java 网络编程(2):UDP 的使用
  • JS数组方法汇总
  • js作用域和this的理解
  • learning koa2.x
  • nfs客户端进程变D,延伸linux的lock
  • PAT A1050
  • Vue 动态创建 component
  • Vue组件定义
  • XForms - 更强大的Form
  • 阿里云Kubernetes容器服务上体验Knative
  • 阿里云购买磁盘后挂载
  • 从零开始在ubuntu上搭建node开发环境
  • 分类模型——Logistics Regression
  • 配置 PM2 实现代码自动发布
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 人脸识别最新开发经验demo
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 设计模式(12)迭代器模式(讲解+应用)
  • 什么软件可以剪辑音乐?
  • 算法系列——算法入门之递归分而治之思想的实现
  • 学习HTTP相关知识笔记
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 【干货分享】dos命令大全
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • (1)Jupyter Notebook 下载及安装
  • (1)无线电失控保护(二)
  • (31)对象的克隆
  • (AngularJS)Angular 控制器之间通信初探
  • (C语言)共用体union的用法举例
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二