视图
视图与基本表不同,是一个虚拟的表。数据库中仅存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。若基本表中的数据发生变化,从视图中查询出的数据也随之改变。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中用户感兴趣的数据及变化。
创建视图语法格式:
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天,继续打卡!!!!!
评论
