暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openGauss每日一练第18天|openGauss逻辑结构:视图管理

原创 shezhang784938 2022-12-11
349

登陆数据库

[root@enmoedu ~]# su - omm
Last login: Sat Dec 10 10:13:49 CST 2022 on pts/1
[omm@enmoedu ~]$ gs_om -t status --detail [ Cluster State ] cluster_state : Unavailable redistributing : No current_az : AZ_ALL [ Datanode State ] node node_ip port instance state ---------------------------------------------------------------------------------------------- 1 enmoedu 192.168.94.135 15400 6001 /opt/huawei/install/data/dn P Primary Manually stopped [omm@enmoedu ~]$ gs_om -t start Starting cluster. ========================================= [SUCCESS] enmoedu 2022-12-11 11:33:07.145 63954f72.1 [unknown] 140453007490112 [unknown] 0 dn_6001 01000 0 [BACKEND] WARNING: could not create any HA TCP/IP sockets 2022-12-11 11:33:07.146 63954f72.1 [unknown] 140453007490112 [unknown] 0 dn_6001 01000 0 [BACKEND] WARNING: could not create any HA TCP/IP sockets 2022-12-11 11:33:07.162 63954f72.1 [unknown] 140453007490112 [unknown] 0 dn_6001 01000 0 [BACKEND] WARNING: Failed to initialize the memory protect for g_instance.attr.attr_storage.cstore_buffers (1024 Mbytes) or shared memory (1894 Mbytes) is larger. ========================================= Successfully started. [omm@enmoedu ~]$ gsql -d enmodb -W enmoedu@1234 -r -p 15400 gsql ((openGauss 3.0.0 build 02c14696) compiled at 2022-04-01 18:12:34 commit 0 last mr ) Non-SSL connection (SSL connection is recommended when requiring high-security) Type "help" for help. enmodb=#



1、创建表,创建普通视图

  • 创建模式、表和插入数据
创建模式
create schema tpcds;

创建表

create table tpcds.customer
( c_customer_sk             integer,   
  c_customer_id             char(5),    
  c_first_name              char(6),    
  c_last_name               char(8) 
) ;


插入数据

insert into tpcds.customer values    
(6885, 1, 'joes', 'hunter'),    
(4321, 2, 'lily','carter'),    
(9527, 3, 'james', 'cook'),
(9500, 4, 'lucy', 'baker');

在当前数据库enmodb的tpcds模式下,查看表customer的信息:


在当前数据库enmodb下,不使用tpcds的模式,查看表customer的信息:


说明:一个数据库下,可以有多个模式,多个模式下,可以启用多个对象【这里的对象指的是:表】


  • 创建视图

在指定的数据下,且明确哪一个模式下:

create view tpcds.customer_details_view_v1 as
select * from tpcds.customer
where c_customer_sk > 5400;



  • 查看视图内容

指定在那个模式下查询视图:

select * from tpcds.customer_details_view_v1;


说明:在同一个数据库下,且不同的模式下,它们可以创建自己的模式下的视图。


2、使用视图创建新的视图

指定在那个模式下创建视图:

create  view tpcds.part_view as  select * from  tpcds.customer_details_view_v1 where  c_customer_sk =9527;


  • 查看新的视图

指定在那个模式下查询视图:

select * from tpcds.part_view;



3、创建物化视图

普通视图在查询中是实时进行计算的。如果建立视图的基表数据很多,使用视图的时候,进行实时计算视图表示的结果集,将消耗很大的计算机资源,并且费时很长。
物化视图提前计算出视图的结果集,并将该结果集保存在数据库里。
如果更新了基表,物化视图将过期。也就是说,基表更新后,物化视图不能反映最新的数据情况。因此在基表发生变化的时候,需要对物化视图进行更新。

  • 创建基表
drop materialized view if exists mv_test;

drop table if exists test;

create table test(id serial primary key,testnum serial);

insert into test(testnum) values(generate_series(1,100000));



  • 创建物化视图
create materialized view mv_test as 
select * from test where testnum%2=0;



  • 查看物化视图目前有多少行记录
select count(*) from mv_test;



4、普通视图相关的系统表pg_views

  • 系统视图pg_views
select * from pg_views where schemaname = 'tpcds' or schemaname = 'public';



5、物化视图相关的系统表GS_MATVIEW

  • GS_MATVIEW系统表提供了关于数据库中每一个物化视图的信息
select * from gs_matview;



6、手动更新物化视图

  • 向基表test插入数据,查看物化视图有多少行记录
insert into test(testnum) values(generate_series(1,100000));

select count(*) from mv_test;



  • 手动更新物化视图,并查看更新物化视图后,物化视图有多少行记录
refresh materialized view mv_test;

select count(*) from mv_test;



5、删除创建的视图

  • 删除普通视图
drop view tpcds.part_view;
drop view tpcds.customer_details_view_v1;



  • 删除物化视图
drop materialized view mv_test;



最后修改时间:2022-12-11 11:58:26
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论