1、首先我们来看临张虢咆噘时视图,临时视图和其他视图的区别是,当你连上数据库以后,创建了临时视图,当你断开连接,再连接到数据库后,临时视图就消失了。看下图,首先我们连上数据库,创建一张数赍铈于脏据库表,因为视图都是建立在表的基础上的。然后开始创建临时视图,命令是:create table info(id int, name text, phone text)create temp view vw_temp as select name, phone from info下面第一张图中是创建表info以及显示表info的信息,第二张图是创建视图,以及显示视图vw_temp的信息。
2、然后退出数据库连接,再登录数据库,查看数据库里的表以及视图。退出数据库命令\q然后再登录命令:psql -d db02输入密码后查看数据库表:\d结果如下图所示,可以看到视图vw_temp已经消失了。示例中说明了临时视图的特性。
3、普通视图,就是具有正常功能的视图,能够一直存在于数据库中,它的数据查询都是从表中查。我们给出两个创建普通视图的示例,第一个是获取info表的id和phone字段。不做其他操作,命令是:create view vw_info1 as select id, phone from info;第二个视图中,修改字段的名称,命令是:create view vw_info2(user_id, user_phone) as select id, phone from info;这两个视图没有太大的区别,唯一的区别就是可以自定义字段的名称。
4、物化视图,这种视图和其他两种视图的区别在于,它内部的数据不是来自表,而是根据查询语句返回的字段和数据生成一张新表保存数据。因此查询的时候直接就是从一张表里查询。而不会是多表查询,同时里面的数据还能更新。我们来创建一个物化视图vw_info3,然后往表中插入几条数据,后面再来进行分析和对比。命令如下:create materialized view vw_info3 as select id,name from info;从下图中可以看到,目前来看,唯一的区别就是它的信息里多了一条materialized view这样一行信息
5、我们往表info里插入数据,然后再对视图vw_info2和vw_info3进行查询,使用explain关键字来分析他们的查询过程,来进行对比。下面第一张图是往表info里插入数据,然后显示具体的数据。第二张图是使用explain关键字分析后的显示结果。从结果中可以清晰地看到,查询普通视图vw_info2时,扫描的是info表,而查询vw_info3时,查询的是vw_info3的表。足以说明这两种视图的区别了。
6、配置物化视图的全量更新和增量更新,前面我们说到,物化视图是将查询语句返回后的数据生成一张新表,因此当原来的表数据更新时,物姝耒匝揎化视图中的内容并不会更新。如下面第一张图中所示,先往info表中插入一条新的数据,然后查询表info和视图vw_info3。可以看到表info中有新增的数据,而创建视图vw_info3时,vw_info3中没有数据,所以查询返回的结果什么都没有。因此需要更新视图,配置更新的命令两种用法如下:refresh materialized view vw_info3 with data;refresh materialized view concurrently with data;上面两个命令,第一个是全量更新,就是把vw_info3里的数据全部删掉,重新更新。第二种是对比vw_info3和表info里的区别,把有变化的更新过来。如下面第二张图中所示,更新以后vw_info3中就有数据了。