返回首页

gbase数据、南大通用产品文档:GBase8cCREATE VIEW

更新日期:2024年09月11日

功能描述
创建一个视图。视图与基本表不同,是一个虚拟的表。数据库中仅存放视图的定义,而
不存放视图对应的数据,这些数据仍存放在原来的基本表中。若基本表中的数据发生变化,
从视图中查询出的数据也随之改变。从这个意义上讲,
视图就像一个窗口,透过它可以看到
数据库中用户感兴趣的数据及变化。
注意事项
被授予CREATE ANY TABLE 权限的用户,可以在public 模式和用户模式下创建视图。
语法格式
CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] VIEW view_name [ ( column_name
[, ...] ) ]
[ WITH ( {view_option_name [= view_option_value]} [, ... ] ) ]
AS query;
说明:创建视图时使用WITH(security_barrier)可以创建一个相对安全的视图,避
免攻击者利用低成本函数的RAISE 语句打印出隐藏的基表数据。
参数说明

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1091

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 语句。
示例
--创建字段spcname 为pg_default 组成的视图。
gbase=#CREATE VIEW myView AS
SELECT * FROM pg_tablespace WHERE spcname = 'pg_default';
--查看视图。
gbase=#SELECT * FROM myView ;

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1092
--删除视图myView。
gbase=#DROP VIEW myView;
相关命令
ALTER VIEW,DROP VIEW

设置 CLUSTER_TXN_SCOPE 配置参数来配置高可用性集群,以便在客户端会话发出提交时,
服务器在辅助服务器上或跨集群地阻塞会话直到事务在那个会话中应用。
onconfig.std 值
CLUSTER_TXN_SCOPE SERVER

 SESSION = 当客户端会话发出提交时,数据库服务器阻塞会话,直到事务提交的影
响返回到那个会话。控制返回到会话之后,同一个数据库服务器的其他会话或集
群中其他数据库服务器上的其他会话可能觉察不到事务提交和事务的影响。
 SERVER (缺省行为) = 当客户端会话发出提交时,数据库服务器阻塞会话,直到
事务应用在客户端发出提交的那个数据库服务器。那个数据库服务器的其他会话

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 50 -
觉察到事务提交和事务的影响。集群中的其他数据库服务器会话可能觉察不到事
务的提交及其影响。对于高可用性集群服务器,这是缺省行为。
 CLUSTER = 当客户端会话发出提交时,数据库服务器阻塞会话,直到事务应用在高
可用性集群中所有数据库服务器,除了使用 DELAY_APPLY 或 STOP_APPLY 的 RS
辅助服务器之外,这些会话觉察到事务提交和事务的影响。
生效
编辑 onconfig 文件并重启数据库服务器之后。
当您通过运行onmode -wf 命令在 onconfig 文件中动态地重置该值时。
当您通过运行 onmode -wm 命令重置内存中的该值时。
您运行带有 -wf CLUSTER_TXN_SCOPE=value 或 -wm CLUSTER_TXN_SCOPE=value 参数的
SQL 管理 API task() 或 admin() 函数之后。
用法
设置 CLUSTER_TXN_SCOPE 配置参数来控制从高可用性集群返回事务提交到客户端应用程
序。集群事务协调可延迟事务提交到客户端应用程序的返回,直到事务应用到辅助服务器
或高可用性集群中的所有辅助服务器。 这个例程防止由于异步日志处理导致的操作失败,
并确保多步骤处理中的那些步骤按串行顺序发生。
集群事务协调不应用到 RS 辅助服务器,
该服务器有 DELAY_APPLY 或 STOP_APPLY 配置函
数值而不是 0。在客户端应用程序可收到提交之前,事务不需要应用在 RS 辅助服务器上。

CLUSTER_TXN_SCOPE 影响只读辅助服务器和可更新辅助服务器上的会话。
示例1:在高可用性集群服务器间的事务协调
在这个示例中,客户端应用程序启动一个两步骤进程。客户端应用程序在主数据库服务器
上插入数据,然后在 HDR 辅助服务器上启动数据处理。
在来自主服务器的日志应用在 HDR 辅助服务器上之前,如果试图在 HDR 服务器上对插入
的数据执行 SELECT,
则操作失败。
为了防止此失败,
设置主服务器的 CLUSTER_TXN_SCOPE
配置参数为 CLUSTER,以便客户端应用程序不收到提交,且不可启动数据处理,直到数据
插入页应用在 HDR 辅助服务器上。
示例2:数据库服务器上的事务协调
在此示例中,您让一个客户端应用程序分作几个处理步骤。每个处理步骤使用一个不同的
SQL 会话来连接到数据库服务器。应用程序更新数据,然后应用程序的另一部分在不同的
SQL 会话中处理被更新的数据。
如果 CLUSTER_TXN_SCOPE 设置为 SESSION,
则处理被更新的数据的那部分应用程序觉察不
到更新的结果,
可发生失败。
为了防止此失败,
设置数据库服务器的 CLUSTER_TXN_SCOPE 配
置参数为 SERVER,以便客户端应用程序不接收提交,且不启动数据处理,直到在数据库服
务器上更新完成。

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 51 -

语法
SUM([DISTINCT/ALL] expr) OVER([PARTITION BY …] [ORDER BY … [ASC/DESC] ]
功能描述
计算组内表达式的移动累加和。
示例
示例1:SUM(k) OVER(PARTITION BY i ORDER BY j DESC)
gbase> DROP TABLE IF EXISTS t1;
Query OK, 0 rows affected

gbase> CREATE TABLE t1(i int, j int,k int);
Query OK, 0 rows affected

gbase> INSERT INTO t1 VALUES(2,1,4),(2,3,6),(2,3,4),(2,5,8),(3,2,2),(3,2,4),(3,2,2),(3,4,6),(3,1,
2),(3,5,8);
Query OK, 10 rows affected
Records: 10 Duplicates: 0 Warnings: 0

gbase> SELECT *,SUM(k) OVER(PARTITION BY i ORDER BY j DESC) AS sum FROM
t1;
+------+------+------+------+
| i | j | k | sum |
+------+------+------+------+
| 2 | 5 | 8 | 8 |
| 2 | 3 | 4 | 18 |
| 2 | 3 | 6 | 18 |
| 2 | 1 | 4 | 22 |
| 3 | 5 | 8 | 8 |
| 3 | 4 | 6 | 14 |
| 3 | 2 | 2 | 22 |
| 3 | 2 | 4 | 22 |
| 3 | 2 | 2 | 22 |
| 3 | 1 | 2 | 24 |
+------+------+------+------+
10 rows in set
用例分析:首先会根据i 分组,在同组内,根据j 降序排列,从每组的第一个值开

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 583
始向后累加k 值,
相同的j 值,
对应的累加和相同,
都是加到最后一个j 值对应的k
值,如果遇到不同组,从0 开始重新累加。
注意
NULL 值的处理方式同聚合函数sum 类似,如果全为NULL 值,则结果为NULL,否
则NULL 不进行累加。
以i 值为2、2、2、2,j 值为5、3、3、1,K 值为8、4、6、4,sum 值为8、18、
18、22 为例,i=2,j=5,k=8 时,sum=8,i=2,j=3,k=4 以及i=2,j=3,k=6 时,
因为j 值相同,所以sum 值相同,计算过程为sum = 8 + 4 + 6 = 18。
示例2:SUM(distinct k) OVER(PARTITION BY i)
gbase> SELECT *,SUM(distinct k) OVER(PARTITION BY i) AS sum FROM t1;
+------+------+------+------+
| i | j | k | sum |
+------+------+------+------+
| 2 | 3 | 6 | 18 |
| 2 | 3 | 4 | 18 |
| 2 | 5 | 8 | 18 |
| 2 | 1 | 4 | 18 |
| 3 | 2 | 2 | 20 |
| 3 | 2 | 4 | 20 |
| 3 | 2 | 2 | 20 |
| 3 | 4 | 6 | 20 |
| 3 | 1 | 2 | 20 |
| 3 | 5 | 8 | 20 |
+------+------+------+------+
10 rows in set
用例分析:
首先根据i 分组,
由于没有ORDER BY 部分,
则同组内的累加和都相等,
将同组内的不重复的k 值进行累加,如果遇到不同组,从0 重新开始。
以i 值为2、2、2、2,j 值为5、3、3、1,k 值为8、4、6、4,sum 值为18、18、
18、18 为例,因为在这4 组数值中,不同的k 值为6、4、8,所以sum= 6 + 4 + 8 =
18。