返回首页

gbase数据、南大通用产品文档:GBase8s共享内存的通信部分 (UNIX™)

更新日期:2024年09月11日

如果至少将一个连接配置为 IPC 共享内存连接,那么数据库服务器将为共享内存的 IPC
通信部分分配内存。数据库服务器将在您设置共享内存时执行此分配。通信部分包含本地
客户机应用程序的消息缓冲区,这些应用程序使用共享内存与数据库服务器进行通信。
共享内存通信部分的大小大约等于 12 KB 乘以共享内存通信所需的期望连接数 (nettype
ipcshm)。如果 nettype ipcshm 不存在,那么期望的连接数将缺省为 50。有关客户机如何
连接到共享内存的通信部分的信息,请参阅客户机如何连接到通信部分 (UNIX)。

功能说明
记录vc 级别权限信息。
表结构说明
表5- 308 表结构信息说明:




Host
主机IP
VC_ID
虚拟集群编码
User
用户名

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1518
Select_priv
select 语句的执行权限
Insert_priv
insert 的权限
Update_priv
update 的权限
Delete_priv
delete 语句的执行权限
Create_priv
create table 的权限
Drop_priv
drop 的权限
Drop_table_priv
drop table 的权限
Drop_view_priv
drop view 的权限
Drop_database_priv
drop database 的权限
Unmask_priv
unmask 的权限
Grant_priv
管理权限的权限
References_priv
未来功能的占位符,当前无用
Index_priv
create index 和drop index 的权限
Alter_priv
Alter 权限
Create_tmp_table_priv
创建temporary table 权限
Lock_tables_priv
允许在有select 权限的表上使用lock tables
Create_view_priv
创建视图的权限
Show_view_priv
使用show create view 的权限
Create_routine_priv
创建存储过程和函数的权限
Alter_routine_priv
是否允许alter 过程及函数
Execute_priv
执行存储过程和函数的权限
Event_priv
event 权限
Trigger_priv
触发器使用权限

功能说明
CTE(common table expression)可定义多个, 按书写顺序,支持后面的CTE 的
query_definition 中引用前面定义的CTE。
Expression_name 可以与数据库中的基础
表或者视图名称相同,主查询引用expression_name 标识符的地方,都是指CTE,
而不是数据库中的基础表或者视图,若没有书写库名将优先引用定义的CTE,若
书写了库名.表名,如test.t1 将引用基础表或视图。
语法格式
[
WITH
Expression_name AS
(
CTE_query_definition
)
, …
]
SELECT ……(主查询);

CTE_query_definition 为一条select 语句,仅支持select 查询语句,其它语句
不支持,其语法需符合GCluster 的select 查询的语法。其它语法约束与from
子查询一致(如定义语句不能为select … into outfile,不能为select …
into …server 等)。From 子查询中支持的语法,CTE 定义语句也同样支持。

Expression_name 为给出的CTE 名称,必须是一个符合GCluster 命名规范的
标识符,CTE 名称长度限定为64 个字符,由数字、字母和下划线组成,若
包含特殊字符需用反引号括起来。若定义了多个CTE,每个CTE 的名称必
须唯一。
示例
gbase> set _t_gcluster_support_cte=1;
示例1:定义一个CTE
gbase> with tt as (select * from t) select * from tt;
+------+------+
| a
| b
|
+------+------+

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1103
|
1 | aa
|
+------+------+
1 row in set (Elapsed: 00:00:00.76)
示例2:定义多个CTE
gbase> with tt1 as (select a,b from t),tt2 as (select a,b from t) select * from tt1
join tt2 on tt1.a=tt2.a;
+------+------+------+------+
| a
| b
| a
| b
|
+------+------+------+------+
|
1 | aa
|
1 | aa
|
+------+------+------+------+
1 row in set (Elapsed: 00:00:04.23)
示例3:后面的CTE 引用前面的CTE
gbase> with tt1 as(select a,b from t),tt2 as(select a+10 as ab from tt1) select *
from tt2;
+------+
| ab
|
+------+
|
11 |
+------+
1 row in set (Elapsed: 00:00:00.54)
示例4:一次定义,多次使用
gbase> with tt as(select a,b from t) select * from tt tt1 join tt tt2 on tt1.a=tt2.a;
+------+------+------+------+
| a
| b
| a
| b
|
+------+------+------+------+
|
1 | aa
|
1 | aa
|
+------+------+------+------+
1 row in set (Elapsed: 00:00:02.86)
示例5:union 场景,只支持“全局”的CTE
gbase> with tt as(select a,b from t) select * from tt where a>1 union select *
from tt where a<1;
+------+------+
| a
| b
|
+------+------+
|
2 | bbb
|
|
-1 | ccc
|
+------+------+
4
rows in set (Elapsed: 00:00:01.01)
示例6:insert…select 中select 部分使用CTE
gbase> insert into t(a,b) with tt as (select a,b from t) select a,b from tt;
Query OK, 3 rows affected (Elapsed: 00:00:01.29)
Records: 3
Duplicates: 0
Warnings: 0
示例7:create…select 中的select 部分使用CTE

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1104
gbase> create table abc as with tt as(select a,b from t) select a,b from tt;
Query OK, 6 rows affected (Elapsed: 00:00:05.91)
示例8:子查询中定义CTE
gbase> with base as (select * from t) select * from (with t1 as (select * from
base) select * from t1) t where a in (select a from t);
+------+------+
| a
| b
|
+------+------+
|
1 | aa
|
|
2 | bbb
|
|
-1 | ccc
|
|
1 | aa
|
|
2 | bbb
|
|
-1 | ccc
|
+------+------+
6 rows in set (Elapsed: 00:00:02.70)

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1105
注意

增加参数_t_gcluster_support_cte 控制gcluster 是否支持cte 语法。
该参数为session 级参数,
默认值为0 表示不支持,
值设置为1 时支持CTE
语法。

子查询中with as 声明的alias 为全局的,不支持子查询中标识符的范围控
制,子查询中的with as 可在全局范围内顺序引用且共用同一名称空间。
按定义顺序,后面的with as 定义可以引用前面的with as 定义。
with tt as (select * from t1) select * from (with tt as (select * from t1) select *
from tt limit 10) aa;
ERROR 1066 (42000): Not unique table/alias: 'tt'

CTE 定义的select 语句中支持使用grouped hint。如
gccli -c -q
use vc vc2023;
use testdb;
set _t_gcluster_support_cte=1;
with tt as(select /*+ grouped('1') */ a,b from t1) select * from tt join t2 on
tt.a=t2.a;

不支持存储过程、函数、视图定义中使用包含有CTE 的查询语句。

不支持嵌套定义CTE。如:
with abcd as (with tt as (select 1 from t1) select * from tt) select * from abcd;
ERROR 1149 (42000): You have an error in your SQL syntax; check the
manual that corresponds to your GBase server version for the right syntax to
use

当设置了如下参数后,CTE 中含有开窗函数时,会通过解析,但是执行结
果不正确
_t_gcluster_support_cte=1
_t_gbase_new_window_function_support=1