PostgreSQL——视图

PG数据库之视图详解 PostgreSQL中的视图是一种虚拟表,通过SQL查询定义,不实际存储数据,可简化数据访问、提高数据安全、实现数据抽象和逻辑独立性,并有助于性能优化。视图在数据报表、分析、挖掘、安全及数据仓库和OLAP应用中具有重要作用。为优化视图性能,可以简化视图定义、优化基础表、合理使用连接、避免复杂逻辑和计算,以及使用物化视图。在创建和管理视图时,应遵循实用建议和最佳实践,如使用CREATE VIEW和CREATE OR REPLACE VIEW语句、限制用户访问权限、使用触发器进行额外验证、监控和分析视图性能等。 阅读详情
AI摘要

本文围绕PostgreSQL的视图展开,介绍了视图是从一个或多个表导出的虚拟表,具有简单化、安全性和逻辑数据独立性等作用。详细讲解了创建视图(单表和多表)、查看视图、删除视图的方法,并给出了相关语句和权限要求,还通过案例辅助说明。

一、视图概述

1.1、视图含义

视图是一个虚拟表,是从数据库中一个或多个表中导出来的表。视图还可以从己经存在的视图基础上定义。

视图一经定义便存储在数据库中,与其相对应的数据并没有像表那样在数据库中再存储一份,通过视图看到的数据只是存放在基本表中的数据。对视图的操作与对表的操作一样,可以对其进行查询、修改和删除。当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化,同时,若基本表的数据发生变化,则这种变化也可以自动地反映到视图中。

下面有student表和st_ info表,在student表中包含了学生的id号和姓名,stu _nfo包含了学生的id号、姓名、班级和家庭住址,而现在公布分班信息,只需要id号、姓名和班级,这该如何解决呢?

create table student(
	s_id int,
	name varchar(40)
);

create table stu_info(
	s_id int,
	glass varchar(40),
	addr varchar(90)
);

这里有一个很好的解决方法,即创建一个视图,视图中的信息来自表的部分信息,其他信息不取,这样既能满足要求也不破坏表原来的结构。

1.2、视图的作用

1. 简单化:
看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。

2. 安全性:
通过视图,用户只能查询和修改他们所能见到的数据。数据库中的其他数据则既看不见、也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定的行和特定的列上。通过视图,用户可以被限制在数据的不同子集上,如下:

  • 使用权限可被限制在基表的行的子集上。
  • 使用权限可被限制在基表的列的子集上。
  • 使用权限可被限制在基表的行和列的子集上
  • 使用权限可被限制在多个基表的连接所限定的行上。
  • 使用权限可被限制在基表中的数据的统计汇总上。
  • 使用权限可被限制在另一视图的一个子集上,或是一些视图和基表合并后的子集上。

3. 逻辑数据独立性:
视图可以帮助用户屏蔽真实表结构变化带来的影响。

二、创建视图

创建视图使用CREATE VIEW语句,基本语法格式如下:

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)] AS SELECT statement
[WITH  [CASCADED | LOCAL] CHECK OPTION]
  • CREATE表示创建新的视图
  • REPLACE表示替换已经创建的视图
  • ALGORITHM表示视图选择的算法
  • view_name表示视图的名称
  • column_list表示属性列
  • SELECT statement表示SELECT语句
  • WITH[CASCADED|LOCAL]CHECK OPTION表示视图在更新时,保证在视图的权限范围之内

ALGORITHM的取值有3个,分别是UNDEFINED MERGE I TEMPTABLE。

  • UNDEFINED表示PostgreSQL将自动选择算法
  • MERGE表示将使用的视图语句与视图定义合并起来,使得视图定义的某一部分取代语句对应的部分
  • TEMPTABLE将视图的结果存入临时表,然后用临时表来执行语句。

CASCADED与LOCAL为可选参数:

  • CASCADED为默认值,表示更新视图时要满足所有相关视图和表的条件
  • LOCAL表示更新视图时,满足该视图本身定义的条件即可。

该语句要求针对视图的CREATE VIEW权限,以及针对由SELECT语句选择的每一列上的某些权限。对于在SELECT语句中其他地方使用的列,必须具有SELECT权限。如果还有OR
REPLACE子句,则必须在视图上具有DROP权限。

2.1、在单表上创建视图

-- 在数据表t上创建一个名为view_t的视图
create table t(
	quantity int,
	price int
);
insert into t values(3, 50);

create view view_t as 
select quantity, price, quantity * price
from t;

-- 查看视图
select * from view_t;

在这里插入图片描述

-- 在t表格上创建一个名为view t2的视图
create view view_t2(qty, price, total) as
select quantity, price, quantity * price 
from t;

select * from view_t2;

在这里插入图片描述

2.2、在多表上创建视图

-- 准备数据
insert into student 
values(1, 'wanglin1'),(2, 'gaoli'), (3, 'zhanghai');
insert into stu_info 
values(1, 'wuban', 'henan'), (3, 'liuban','hebei'),(3, 'qiban', 'shandong');

-- 在表student和表stu info上创建视图stu_glass
create view stu_glass(id, name, glass) as
select student.s_id, student.name, stu_info.glass
from student, stu_info
where student.s_id = stu_info.s_id;

-- 查看视图数据
select * from stu_glass;

在这里插入图片描述

三、查看视图

在PostgreSQL中,数据库下的views表中存储了所有视图的定义。通过对views表的查询,可以查看数据库中所有视图的详细信息,查询语句如下:

-- 语法
select * from information_schema.views;
-- 在views表中查看视图的详细定义,语句如下:
select * from information_schema.views;

在这里插入图片描述

四、删除视图

删除一个或多个视图可以使用DROP VIEW语句,语法如下:

DROP VIEW [IF EXISTS]
view_name [, view_name] ...
[RESTRICT | CASCADE]

其中,view name是要别除的视图名称,可以添加多个需要删除的视图名称,各个名称之间使用逗号分隔开。删除视图必须拥有DROP权限。

-- 删除stu_glass视图
drop view if exists stu_glass;

五、案例

-- 准备数据
-- 创建学生表
create table stu(
	s_id int primary key,
	s_name varchar(20) not null,
	addr varchar(50) not null,
	tel varchar(50) not null
);

-- 插入数据
insert into stu 
values(1, 'XiaoWang', 'Henan', '0731-12345678'),
(2, 'XiaoLi', 'Hebei', '13889072345'),
(3, 'XiaoTian', 'Henan', '0731-12345679');

-- 创建报名表
create table sign(
	s_id int primary key,
	s_name varchar(20) not null,
	s_sch varchar(50) not null,
	s_sign_sch varchar(50) not null
);

-- 插入数据
insert into sign
values(1, 'XiaoWang', 'Middle School1', 'Peking University'),
(2, 'XiaoLi', 'Middle School2', 'Tsinghua University'),
(3, 'XiaoTian', 'Middle School3', 'Tsinghua University');

-- 创建成绩表
create table stu_mark(
	s_id int primary key,
	s_name varchar(20) not null,
	mark int not null
);

-- 插入记录
insert into stu_mark 
values(1, 'XiaoWang', 80),
(2, 'XiaoLi', 71),
(3, 'XiaoTian', 70);
-- 创建考上Peking University的学生的视图
create view beida(id, name, mark, sch) as
select stu_mark.s_id, stu_mark.s_name, stu_mark.mark, sign.s_sign_sch
from stu_mark, sign
where stu_mark.s_id = sign.s_id and stu_mark.mark >= 41 and sign.s_sign_sch = 'Peking University';

-- 查看视图
select * from beida;

在这里插入图片描述

--  创建考上Tsinghua University的学生的视图
create view qinghua (id, name, mark, sch) as
select stu_mark.s_id, stu_mark.s_name, stu_mark.mark, sign.s_sign_sch
from stu_mark, sign
where stu_mark.s_id = sign.s_id and stu_mark.mark >= 40 and sign.s_sign_sch = 'Tsinghua University';

-- 查看视图
select * from qinghua;

在这里插入图片描述

-- 删除创建的视图
drop view beida;
drop view qinghua;
PostgreSQL 视图 PostgreSQL 视图是一种强大的数据库功能,它可以帮助用户简化查询、提高安全性、优化性能和实现数据抽象。掌握视图的创建、特性和高级应用,对于数据库开发者来说至关重要。通过本文的介绍,相信您已经对 PostgreSQL 视图有了更深入的了解。# PostgreSQL 视图## 引言PostgreSQL 是一款功能强大的开源关系型数据库管理系统,它支持多种高级功能,包括视图(Views)。视图是数据库中的一个虚拟表,它基于查询的结果集提供数据。视图可以简化复杂的查询,增强数据安全性,以及提高查询性能。 阅读详情

相关推荐

PostgreSQL系统视图

查看所有的系统视图 postgres=# \dv pg_* (1)系统视图 视图名称 描述 pg_available_extensions 可用的扩展 pg_available_extension_versions 所有版本的扩展 pg_config 编译时配置参数 pg_cursors 打开的游标 pg_file_settings 配...

Direction 1740

PostgreSql 视图

视图(View)本质上是一个存储在数据库中的查询语句。视图本身不包含数据,也被称为虚拟表。我们在创建视图时给它指定了一个名称,然后可以像表一样对其进行查询。

脑子进水养啥鱼?的博客 6467

【PostgreSQL教程】PostgreSQL 高级篇之 视图

View(视图)是一张假表,只不过是通过相关的名称存储在数据库中的一个 PostgreSQL 语句。 View(视图)实际上是一个以预定义的 PostgreSQL 查询形式存在的表的组合。 View(视图)可以包含一个表的所有行或从一个或多个表选定行。 View(视图)可以从一个或多个表创建,这取决于要创建视图的 PostgreSQL 查询。

No8g攻城狮的博客 1510

【学习笔记】PostgreSQL之视图

视图允许用户通过始终如一的接口封装表的结构细节,这样可以避免表结构随着应用的进化而改变。PostgreSQL中的视图(View)是一个虚拟的表,是由一个或多个基本表(或其他视图)生成的结果集。你可以使用视图来隐藏复杂的查询逻辑,简化常见查询,并提高数据的安全性,因为你可以限制用户访问表的特定部分。对视图的更新和删除操作将直接影响基本表,因此在进行此类操作时要格外小心,确保你要执行的操作是正确的。是一个可更新的视图,它允许执行插入、更新和删除操作,这些操作实际上会影响名为。选项可以同时删除依赖于视图的对象,

聪明马的博客 3613

《PostgreSQL开发指南》第32篇 物化视图

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

Tony.Dong的专栏 2523

PostgreSQL: 十. 视图

十. 视图 10.1 视图概述 1、视图是一个虚拟表,是从数据库中一个或多个表中导出来的表。 2、视图的作用: 简单化,经常使用的查询可以被定义为视图,用户不必为以后的操作每次指定全部的条件; 安全性,通过视图,用户只能查询和修改他们能见到的数据; 逻辑数据独立性,视图可帮助用户屏蔽真实表结构变化带来的影响。 10.2 创建视图 【例10.1】在数据t上创建一个名为view_t的视图,代码如下...

数据知道的博客 3万+

PostgreSQL15——视图

视图(View)本质上是一个存储在数据库中的查询语句。视图本身不包含数据,也被称为虚拟表。我们在创建视图时给它指定了一个名称,然后可以像表一样对其进行查询。替代复杂查询,减少复杂性。将复杂的查询语句定义为视图,然后使用视图进行查询,可以隐藏具体的实现;提供一致性接口,实现业务规则。在视图的定义中增加业务逻辑,对外提供统一的接口;当底层表结构发生变化时,只需要修改视图接口,而不需要修改外部应用,可以简化代码的维护并减少错误;控制对于表的访问,提高安全性。通过视图为用户提供数据访问,而不是直接访问表。

吴声子夜歌的博客 1240

PostgreSQL 实战:一文理解视图与物化视图

PostgreSQL中视图(View)和物化视图(Materialized View)是两种重要的数据库对象。视图是虚拟表,不存储数据,每次查询实时计算,适用于简化复杂查询和权限控制;物化视图则物理存储查询结果,查询速度快但数据非实时,适合报表等低频更新场景。视图支持部分更新操作,物化视图需手动刷新数据。选择时需权衡实时性与性能:视图提供即时数据,物化视图优化查询速度但存在延迟。典型应用包括API接口(视图)、报表系统(物化视图)和复杂权限过滤(视图+RLS)。合理使用可构建高效安全的数据访问层。

数据知道的博客 2700

PostgreSQL物化视图详解

随着数据库规模的增大和查询复杂性的提高,数据库查询的性能问题变得越来越突出。为了优化查询性能,数据库系统引入了物化视图的概念。物化视图是一种预先计算和存储的查询结果,它可以在需要时直接提供查询结果,而无需重新执行复杂的查询操作。

谦谦均的博客 1929

RS422总线

①.RS422发送驱动器无高阻三态(浮空)状态RS422收发芯片,发送脚固定强驱动输出,永远钳位 A/B 差分电平,不能关断、不能悬空,只要芯片上电,TX+、TX - 就强制输出互补电压(一路高、一路低)。多条发送并联在同一组差分线上:两个驱动器一个拉 A 高、一个拉 A 低,B 线反向拉扯 → 电源→地大电流对灌,瞬间芯片过流发烫烧毁、总线电平短路错乱。注意:RS485 带DE/RE 收发使能脚:不用发送时可关闭驱动器,输出变成高阻浮空,让出总线,因此能多节点分时发送。③.多点通信方式,一主多从方式;

zhuimeng_1234的博客 223

企业微信微盘API权限避坑指南:为什么你的Python脚本无法获取文件列表?

本文深入解析了企业微信微盘API的权限模型,解释了为何即使使用超级管理员账号,Python脚本也可能因权限不足而无法获取文件列表。核心在于微盘API基于“应用身份”而非“用户身份”进行校验,应用只能访问自身创建的空间。文章提供了构建文件上传代理、利用事件回调等合规的替代方案,帮助企业实现高效数据同步。

weixin_29322553的博客 533

PostgreSQL视图

在PostgreSQL中,视图(VIEW)是一个伪表。 它不是物理表,而是作为普通表选择查询。 视图也可以表示连接的表。 它可以包含表的所有行或来自一个或多个表的所选行。 视图便于用户执行以下操作: 它以自然和直观的方式构建数据,并使其易于查找。 它限制对数据的访问,使得用户只能看到有限的数据而不是完整的数据。 它归总来自各种表中的数据以生成报告。 PostgreSQL创建视图 可以使用...

Orbita_wangtao 5788

SAP入门技术分享四:模块化程序

SAP入门技术分享三:模块化程序

ITxiaoangzai的博客 1152

PostgreSQL View(视图)

PostgreSQL视图实战手册摘要 本手册全面介绍PostgreSQL视图技术,涵盖基础语法、高级特性与最佳实践。主要内容包括: 视图基础:虚拟表概念与核心优势(简化复杂查询、数据安全、权限控制等) 语法详解:创建/修改/删除视图的标准语法与示例 高级视图类型: 可更新视图(自动与触发器强制) 物化视图(高性能查询场景) 递归视图(处理层级数据) 安全视图(结合行级安全策略) 关键特性:WITH CHECK OPTION安全机制、权限管理独立于底层表 性能优化:索引策略、物化视图使用场景、EXPLAIN分

likuoelie的博客 844

Windows 11下WSL2安装CUDA避坑指南:从驱动版本匹配到环境变量配置

本文详细解析了在Windows 11的WSL2中搭建CUDA开发环境的完整流程与核心避坑要点。关键在于理解“驱动在Windows,工具链在Linux”的独特架构,并确保显卡驱动与CUDA Toolkit版本严格匹配。指南涵盖了从驱动验证、WSL-Ubuntu专用仓库安装、环境变量配置到GCC版本冲突、GPU算力不匹配等常见问题的解决方案,帮助开发者高效构建稳定的深度学习与高性能计算环境。

smartcontract5的博客 468

UltraScale系列底层结构(3)——URAM概述

在UltraScale+™ 器件中,除了我们在常规熟悉的BRAM资源以外,还额外提供了URAM(UltraRAM)资源。 UltraRAM 是一种单时钟同步操作的高密度存储器,每个 UltraRAM 块可存储 288 Kb 数据,配置为 4K x 72 位的存储单元,其容量是 Block RAM 的八倍。虽然 UltraRAM 内部使用单端口存储单元,但通过在一个时钟周期内顺序执行端口 A 和端口 B 的操作,实现了双端口功能。

apple_53311083的博客 2835

PostgreSQL创建视图

在PostgreSQL中,视图(VIEW)是一个伪表。 它不是物理表,而是作为普通表选择查询。视图也可以表示连接的表。 它可以包含表的所有行或来自一个或多个表的所选行。 视图便于用户执行以下操作: 它以自然和直观的方式构建数据,并使其易于查找。 它限制对数据的访问,使得用户只能看到有限的数据而不是完整的数据。 它归总来自各种表中的数据以生成报告。 PostgreSQL创建视图 可以使用CREATE VIEW语句来在PostgreSQL中创建视图。 您可以从单个表,多个表以及另一个视图创建它。 语法 CR

极客神殿 8726

华为OD新系统机试真题 - 失灵的键盘(C/C++/Py/Java/Js/Go)

华为OD新系统机试真题 【失灵的键盘】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD4月15号机试真题【失灵的键盘】

qq_45776114的博客 1070

PostgreSQL 视图VIEW详解:从基础到高级应用

PostgreSQL视图(VIEW)详解:从创建到高级应用 摘要: PostgreSQL视图是一种基于SQL查询的虚拟表,不存储实际数据但提供动态查询结果。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 6458

OpenCV实例(八)车牌字符识别技术(三)汉字识别

相较于数字和英文字符的识别,汽车牌照中的汉字字符识别的难度更大,主要原因有以下4个方面:(1)字符笔画因切分误差导致非笔画或笔画流失。(2)汽车牌照被污染导致字符上出现污垢。(3)采集所得车辆图像分辨率低导致多笔画的汉字较难分辨。(4)车辆图像采集时所受光照影响的差异导致笔画较淡。综合汉字识别时的这些难点来看,很难被直接提取的是字符的局部特征。笔画作为最重要的特征而仅存在于汉字中,这由先验知识可知。一旦捺、横、竖、撇这些笔画特征被提取到,对于汉字字符识别的工作就完成了许多。

小幽余生不加糖 1650

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

postgresql-视图

视图(View)本质上是一个存储在数据库中的查询语句。视图本身不包含数据,也被称为虚拟表。我们在创建视图时给它指定了一个名称,然后可以像表一样对其进行查询。

Java_Fly1的博客 1191

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

3.4 PostgreSQL视图的创建与使用

在 PostgreSQL 中,视图(View)是基于 SQL 语句的虚拟表。它不存储数据,而是根据定义的查询动态生成结果集。视图可以包含一个或多个表的列,甚至可以包含复杂计算和多表连接。在创建视图时,可以定义要包含的字段(列)和筛选条件。选择特定字段在SELECT语句中指定需要的字段。设置筛选条件使用WHERE子句来定义视图的数据筛选条件。示例这将创建一个名为的视图,显示所有活跃状态的客户信息。修改视图定义涉及到删除旧视图并创建一个新视图。重新创建视图。

Python老吕的博客 2054

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

PostgreSQL视图和物化视图

PostgreSQL 视图、物化视图

weixin_45706122的博客 8662
上一篇: PostgreSQL——索引
下一篇: PostgreSQL——触发器
吴声子夜歌
博客等级 码龄9年 2688粉丝 2268原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值