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

openGauss每日一练第11天 | openGauss视图

原创 lxs_data 2021-12-11
688

视图

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

创建视图语法格式:

CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] VIEW view_name [ ( column_name [, ...] ) ]
    [ WITH ( {view_option_name [= view_option_value]} [, ... ] ) ]
    AS query;
复制

特别说明:

 创建视图时使用WITH(security_barriers)可以创建一个相对安全的视图,避免攻击者利用低成本函数的RAISE语句打印出隐藏的基表数据。

参数解释:

  • OR REPLACE

    如果视图已存在,则重新定义。

  • TEMP | TEMPORARY

    创建临时视图。

  • view_name

    要创建的视图名称。可以用模式修饰。

    取值范围:字符串,符合标识符命名规范。

  • column_name

    可选的名称列表,用作视图的字段名。如果没有给出,字段名取自查询中的字段名。

    取值范围:字符串,符合标识符命名规范。

  • view_option_name [= view_option_value]

    该子句为视图指定一个可选的参数。

    目前view_option_name支持的参数仅有security_barrier,当VIEW试图提供行级安全时,应使用该参数。

    取值范围:Boolean类型,TRUE、FALSE

  • query

    为视图提供行和列的SELECT或VALUES语句。

为系统表PG_DATABASE创建视图,重命名视图并修改owner为jim

查询统表PG_DATABASE,语句如下:

omm=# select * from PG_DATABASE;
datname | datdba | encoding | datcollate | datctype | datistemplate | datallowconn |
datconnlimit | datlastsysoid | datfrozenxid | dattablespace | datcompatibility | data
cl | datfrozenxid64
-----------+--------+----------+-------------+-------------+---------------+--------------+-
-------------+---------------+--------------+---------------+------------------+------------
----------+----------------
template1 | 10 | 7 | en_US.UTF-8 | en_US.UTF-8 | t | t | -1 | 14176 | 0 | 1663 | PG | {=c/omm,omm=CTc/omm} | 8176
omm | 10 | 7 | en_US.UTF-8 | en_US.UTF-8 | f | t | -1 | 14176 | 7891 | 1663 | PG | -1 | 14176 | 0 | 1663 | PG | {=c/omm,omm=CTc/omm} | 7891
postgres | 10 | 7 | en_US.UTF-8 | en_US.UTF-8 | f | t | -1 | 14176 | 0 | 1663 | PG | | 8461 | 7891
template0 | 10 | 7 | en_US.UTF-8 | en_US.UTF-8 | t | f |
(4 rows)

系统表PG_DATABASE创建视图PG_DATABASE_view,语句如下:

omm=# CREATE VIEW PG_DATABASE_view as select * from PG_DATABASE;
CREATE VIEW

查看视图PG_DATABASE_view,语句如下:

omm=# select * from PG_DATABASE_view;
datname | datdba | encoding | datcollate | datctype | datistemplate | datallowconn |
datconnlimit | datlastsysoid | datfrozenxid | dattablespace | datcompatibility | data
cl | datfrozenxid64
-----------+--------+----------+-------------+-------------+---------------+--------------+-
-------------+---------------+--------------+---------------+------------------+------------
----------+----------------
template1 | 10 | 7 | en_US.UTF-8 | en_US.UTF-8 | t | t | -1 | 14176 | 0 | 1663 | PG | {=c/omm,omm=CTc/omm} | 8176
omm | 10 | 7 | en_US.UTF-8 | en_US.UTF-8 | f | t | -1 | 14176 | 7891 | 1663 | PG | | 7891
template0 | 10 | 7 | en_US.UTF-8 | en_US.UTF-8 | t | f | -1 | 14176 | 0 | 1663 | PG | {=c/omm,omm=CTc/omm} | 7891
postgres | 10 | 7 | en_US.UTF-8 | en_US.UTF-8 | f | t | -1 | 14176 | 0 | 1663 | PG | | 8461
(4 rows)

重命名视图为 PG_DATABASE_view_v2,语句如下:

omm=# ALTER VIEW PG_DATABASE_view RENAME TO PG_DATABASE_view_v2;
ALTER VIEW

并修改owner为jim,语句如下:

omm=# create user jim password 'lxs_data@123';
NOTICE: The encrypted password contains MD5 ciphertext, which is not secure.
CREATE ROLE
omm=# alter view PG_DATABASE_view_v2 owner to jim;
ALTER VIEW
查看视图信息,语句如下:

omm=# \d+ PG_DATABASE_view_v2;
View "public.pg_database_view_v2"
Column | Type | Modifiers | Storage | Description
------------------+-----------+-----------+----------+-------------
datname | name | | plain |
datdba | oid | | plain |
encoding | integer | | plain |
datcollate | name | | plain |
datctype | name | | plain |
datistemplate | boolean | | plain |
datallowconn | boolean | | plain |
datconnlimit | integer | | plain |
datlastsysoid | oid | | plain |
datfrozenxid | xid32 | | plain |
datfrozenxid64 | xid | | plain |
View definition:
SELECT *
FROM pg_database;
dattablespace | oid | | plain |
datcompatibility | name | | plain |
datacl | aclitem[] | | extended | 

创建一个用户表student,并在用户表上创建视图,修改视图schema

omm=# CREATE TABLE student
omm-# (s_student_sk integer,
omm(# s_student_id char(5),
omm(# s_first_name char(6),
omm(# s_last_name char(8)
omm(# ) ;
CREATE TABLE


omm=# INSERT INTO student VALUES
omm-# (6885, 1, 'Joes', 'Hunter'),
omm-# (4321, 2, 'Lily','Carter'),
omm-# (9527, 3, 'James', 'Cook'),
omm-# (9500, 4, 'Lucy', 'Baker');
INSERT 0 4

omm=# CREATE VIEW student_view as select * from student;
CREATE VIEW

omm=# alter view student_view owner to jim;

ALTER VIEW

omm-#
omm-# \d+ student_view;
View "public.student_view"
Column | Type | Modifiers | Storage | Description
--------------+--------------+-----------+----------+-------------
s_student_sk | integer | | plain |
s_student_id | character(5) | | extended |
s_first_name | character(6) | | extended |
s_last_name | character(8) | | extended |
View definition:
SELECT *
FROM student;

使用pg_views查看视图信息

omm=# select * from pg_views where schemaname = 'jim' or schemaname = 'public';
schemaname | viewname | viewowner | definition
------------+---------------------+-----------+-----------------------------
public | pg_database_view_v2 | jim | SELECT * FROM pg_database;
public | student_view | jim | SELECT * FROM student;
(2 rows)

删除视图、表、用户

查看视图:

omm=# select * from pg_views where schemaname = 'jim' or schemaname = 'public';
schemaname | viewname | viewowner | definitio
n
------------+---------------------+-----------+---------------------------------------------
-------------------------------------
public | pg_database_view_v2 | jim | SELECT * FROM pg_database;
public | student_view | jim | SELECT * FROM student;
public | tps_view | omm | SELECT * FROM pg_tablespace WHERE (pg_table
space.spcname = 'pg_default'::name);
(3 rows)

删除视图:

omm=# DROP VIEW pg_database_view_v2;
DROP VIEW
omm=# Drop view student_view;
DROP VIEW
omm=# Drop view tps_view


omm=# \d+
No relations found.

删除表:

omm=# drop table student;
DROP TABLE

删除用户:

omm=# \du+
List of roles
Role name | Attributes
| Member of | Description
-----------+--------------------------------------------------------------------------------
----------------------------------+-----------+-------------
gaussdb | Sysadmin
| {} |
jack |
| {} |
jim |
| {} |
omm | Sysadmin, Create role, Create DB, Replication, Administer audit, Monitoradmin,
Operatoradmin, Policyadmin, UseFT | {} |

omm=# drop user jim;
DROP ROLE


omm=# \du+
List of roles
Role name | Attributes
| Member of | Description
-----------+--------------------------------------------------------------------------------
----------------------------------+-----------+-------------
gaussdb | Sysadmin
jack |
| {} |
| {} |
omm | Sysadmin, Create role, Create DB, Replication, Administer audit, Monitoradmin,
Operatoradmin, Policyadmin, UseFT | {} | 


持续打卡第11天,继续打卡!!!!!



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

评论

墨天轮福利君
暂无图片
3年前
评论
暂无图片 0
您好,您的文章已入选合格奖,10墨值奖励已经到账请查收! ❤️我们还会实时派发您的流量收益。
3年前
暂无图片 点赞
评论
目录
  • 视图
  • 为系统表PG_DATABASE创建视图,重命名视图并修改owner为jim
    • 查询统表PG_DATABASE,语句如下:
    • 系统表PG_DATABASE创建视图PG_DATABASE_view,语句如下:
    • 查看视图PG_DATABASE_view,语句如下:
    • 重命名视图为 PG_DATABASE_view_v2,语句如下:
    • 并修改owner为jim,语句如下:
  • 创建一个用户表student,并在用户表上创建视图,修改视图schema
  • 使用pg_views查看视图信息