GaussDB如何创建和管理视图

一、什么是视图

当用户对数据库中的一张或者多张表的某些字段的组合感兴趣,而又不想每次键入这些查询时,用户就可以定义一个视图,以便解决这个问题。

视图与基本表不同,不是物理上实际存在的,是一个虚表。数据库中仅存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。若基本表中的数据发生变化,从视图中查询出的数据也随之改变。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中用户感兴趣的数据及变化。视图每次被引用的时候都会运行一次。

二、构造测试数据

步骤 1 执行如下语句,创建测试表。

CREATE TABLE infotest ( id int, name varchar(30) , price float , PRIMARY KEY (id)) ;

步骤 2 执行如下语句,在表中插入数据。

insert into infotest values (1001,’牙刷’,10.5),(1002,’毛巾’,21.5),(1003,’茶几’,999.9),(1004,’电视’,3199),(1005,’冰箱’,2999),(1006,’1 手机’,1999),(1007,’2 手机’,7699),(1008,’.3 手机’,699.9),(1009,’T恤’,21.5),(1010,’牛仔裤’,99);

三、创建视图

执行如下语句创建新视图MyView,其中infotest为构造测试数据中创建的表。

CREATE OR REPLACE VIEW MyView AS SELECT * FROM infotest WHERE price < 1000;

CREATE VIEW

CREATE VIEW中的OR REPLACE可有可无,当存在OR REPLACE时,表示若以前存在该视图就进行替换。

关于CREATE VIEW的更多用法请参考创建视图。

四、查询视图

执行如下语句查询MyView视图。

SELECT * FROMMyView;

id| name| price ------+-----------+-------1001 | 牙刷|10.51002 | 毛巾|21.51003 | 茶几| 999.91008 | .3 手机 | 699.91009 | T恤|21.51010 | 牛仔裤 |99 (6 rows)

五、查看某视图的具体信息

执行如下语句查询MyView视图的详细信息。

\d+ MyView

 View "root.myview"Column | Type| Modifiers | Storage| Description --------+-----------------------+-----------+----------+-------------id | integer | | plain|name | character varying(30) | | extended |price| double precision| | plain| View definition:SELECT*FROM infotest WHERE infotest.price < 1000::double precision;

六、更新数据

步骤 1 执行如下语句更新数据。

UPDATEinfotestSETname=’手机’ where id = 1008;

步骤 2 更新数据后,通过视图查询更新后的信息。

SELECT * FROM MyView;

id| name| price ------+-----------+-------1001 | 牙刷|10.51002 | 毛巾|21.51003 | 茶几| 999.91009 | T恤|21.51010 | 牛仔裤 |991008 | 手机| 699.9 (6 rows) 

七、更改视图名称

步骤 1 执行如下语句将视图改名。

ALTER VIEW MyView RENAMETOYourView;

ALTER VIEW

更多用法请参考更改视图。

步骤 2 执行如下命令,查看改名效果。

\d+YourView

View "root.yourview" Column | Type| Modifiers | Storage| Description--------+-----------------------+-----------+----------+------------- id | integer | | plain| name | character varying(30) | | extended | price| double precision| | plain|View definition: SELECT* FROM infotestWHERE infotest.price < 1000::double precision;

八、删除视图

执行如下命令删除MyView视图。

drop view YourView;

DROP VIEW

GaussDB如何创建和管理定时任务

当用户在使用数据库过程中,如果白天执行一些耗时比较长的任务(例如:统计数据汇总之类或从其他数据库同步数据的任务),会对正常的业务有性能影响,所以用户经常选择在晚上执行,这增加了用户的工作量。因此数据库GaussDB提供定时任务的功能,可以由用户创建定时任务,当任务时间点到达后可以自动触发任务的执行,从而可以减少用户户运维的工作量。

GaussDB提供定时任务的创建、任务到期自动执行、任务删除、修改任务属性(包括:任务id、任务的关闭开启、任务的触发时间、触发时间间隔、任务内容等)。

一、定时任务管理

步骤 1 创建测试表:

postgres=# CREATE TABLE test(id int, time date);

当结果显示为如下信息,则表示创建成功。

CREATE TABLE

步骤 2 创建自定义存储过程:

postgres=# CREATE OR REPLACE PROCEDURE PRC_JOB_1()ASN_NUM integer :=1;BEGINFOR I IN 1..1000 LOOPINSERT INTO test VALUES(I,SYSDATE);END LOOP;END;/

当结果显示为如下信息,则表示创建成功。

CREATE PROCEDURE

步骤 3 创建任务:

  • 新创建的任务(未指定job_id)表示每隔1分钟执行一次存储过程PRC_JOB_1。
postgres=# call dbe_task.submit('call public.prc_job_1(); ', sysdate, 'interval ''1 minute''', :a);job-----1(1 row)
  • 指定job_id创建任务,其中job_id可用范围为1~32767。
postgres=# call dbe_task.id_submit(2,'call public.prc_job_1(); ', sysdate, 'interval ''1 minute''');isubmit--------- (1 row)

步骤 4 通过视图查看当前用户已创建的任务信息。

postgres=# select job,dbname,start_date,last_date,this_date,next_date,broken,status,interval,failures,what from my_jobs;job | dbname | start_date| last_date| this_date|next_date| broken | status |interval | failures | what-----+--------+---------------------+----------------------------+----------------------------+---------------------+--------+--------+---------------------+----------+---------------------------1 | postgres | 2017-07-18 11:38:03 | 2017-07-18 13:53:03.607838 | 2017-07-18 13:53:03.607838 | 2017-07-18 13:54:03 | n| s| interval '1 minute' |0 | call public.prc_job_1();(1 row)

步骤 5 停止任务。

postgres=# call dbe_task.finish(1,true);broken-------- (1 row)

步骤 6 启动任务。

postgres=# call dbe_task.finish(1,false);broken-------- (1 row)

步骤 7 修改任务属性:

  • 修改JOB的Next_date参数信息。

–修改Job1的Next_date为1小时以后开始执行。

postgres=# call dbe_task.next_time(1, sysdate+1.0/24);next_date----------- (1 row)
  • 修改JOB的Interval参数信息。

–修改Job1的Interval为每隔1小时执行一次。

postgres=# call dbe_task.interval(1,'sysdate + 1.0/24');interval---------- (1 row)
  • 修改JOB的What参数信息。

–修改Job1的What为执行SQL语句“insert into public.test values(333, sysdate+5);”。

postgres=# call dbe_task.content(1,'insert into public.test values(333, sysdate+5);');what------ (1 row)
  • 同时修改JOB的Next_date、Interval、What等多个参数信息。
postgres=# call dbe_task.update(1, 'call public.prc_job_1();', sysdate, 'interval ''1 minute''');change-------- (1 row)

步骤 8 删除JOB。

postgres=# call dbe_task.cancel(1);remove-------- (1 row)

总结

GaussDB是华为自主创新研发的分布式关系型数据库。该产品支持分布式事务,同城跨AZ部署,数据0丢失,支持1000+的扩展能力,PB级海量存储。同时拥有云上高可用,高可靠,高安全,弹性伸缩,一键部署,快速备份恢复,监控告警等关键能力,能为企业提供功能全面,稳定可靠,扩展性强,性能优越的企业级数据库服务。

GaussDB分布式形态整体架构如下: