返回首页

gbase数据、南大通用产品文档:GBase8aMID(str,pos,len)

更新日期:2024年09月11日

函数说明
返回字符串str 中,从pos 位置开始,长度为len 的子串。MID(str,pos,len)等价于
SUBSTRING(str,pos,len)。
示例
示例1:SUBSTRING()与MID()等价。
gbase> SELECT SUBSTRING('Quadratically',5,6),MID('Quadratically',5,6)
FROM dual;
+--------------------------------+--------------------------+
| SUBSTRING('Quadratically',5,6) | MID('Quadratically',5,6) |
+--------------------------------+--------------------------+
| ratica
| ratica
|
+--------------------------------+--------------------------+
1 row in set

虚拟集群镜像功能提供了三种方式创建表镜像。分别是:
1.
创建单个表镜像;
2.
以库为单位创建表镜像;
3.
同时创建主表和镜像表;
4.
创建库的默认镜像VC。

创建单个镜像表
创建镜像表命令:
ALTER TABLE VC1.DB.T1 CREATE MIRROR TO VC2;
以上命令用于VC1.DB.T1 表和VC2.DB 库已存在,VC2.DB.T1 表不存在的场景
下,在VC2.DB 下创建T1 表、同步数据并创建镜像关系,使VC1.DB.T1 与
VC2.DB.T1 完全一样,并在后续对镜像关系表的任意一边操作保持同步到另一
边。如果VC2.DB.T1 表存在则报错。
强制创建镜像命令:
ALTER TABLE VC1.DB.T1 CREATE MIRROR TO VC2 FORCE;
以上命令使用FORCE 参数,用于VC2.DB.T1 表存在的场景,会强制在VC2.DB
中创建VC1.DB.T1 的镜像表,
使VC2.DB.T1 与VC1.DB.T1 完全一样,
并在后续
对镜像关系表的任意一边操作保持同步到另一边。

GBase 8a MPP Cluster 产品手册
4 管理员指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
215
注意
使用强制创建镜像表SQL 时,当VC1.DB.T1 与VC2.DB.T1 的表结构不相
同,该命令会删除VC2.DB.T1 表,然后使用VC1.DB.T1 表的建表SQL 重新创建
VC2.DB.T1 表,最后再同步VC1.DB.T1 表数据到VC2.DB.T1 表。
已经建立镜像关系的表可以直接删除,表删除后,镜像关系也随之删除。

以库为单位创建表镜像
ALTER DATABASE VC1.DB CREATE MIRROR TO VC2;
用于VC1.DB 库和VC2.DB 库都存在的场景,
在VC2.DB 中创建VC1.DB 里所
有的非同名表和非同名存储过程、函数,同时对这些新创建的非同名表同步数
据和创建镜像关系,使创建了镜像关系的两张表结构和数据完全一致(存储过
程和函数没有镜像关系)。后续对镜像关系的任意一边表做更改都将同步到镜
像关系的另一边的表中,使两张表完全一致。
如果VC2.DB 中存在VC1.DB 的同名表或同名存储过程、函数,则整个sql 会
以warning 的方式返回同名表、同名存储过程和函数的创建失败信息。
VC1.DB 中的表
VC2.DB 中的表
本功能执行结果
T
VC2.DB 中创建T 的镜像表
T2
T2
VC2.DB 中T2 无变化,warnings 中报T2 已存
在信息
T3
VC2.DB 中T3 无变化,没有任何影响
procedure1
VC2.DB 中创建procedure1 存储过程,但无镜
像关系
procedure2
VC2.DB 中procedure2 不受影响,无变化
创建镜像关系时只会在VC2.DB 中创建VC1.DB 的镜像表,VC1.DB 中表、存储过程、函数
等不会有变化。镜像关系创建成功后,镜像关系两侧的表没有主次之分,任意一边的操作
会映射到关系的另一侧表,保持两侧的表完全一致。
本功能主要是批量给库下的表创建镜像,也就是多个表并发创建镜像,并发数
由参数gcluster_mirror_parallel_count 指定。

GBase 8a MPP Cluster 产品手册
4 管理员指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
216
注意
gcluster_mirror_parallel_count 是session 级参数。
需要在执行前先设置并行
度,否则,在执行创建镜像表的过程中更改这个参数不生效。
创建成功后可以在gbase.table_distribution 中查看表的镜像关系:
select vc_id,index_name,mirror_vc_id from gbase.table_distribution where
dbname='***';
强制创建库级镜像表命令(使用Force 参数):
ALTER DATABASE VC1.DB CREATE MIRROR TO VC2 FORCE;
用于VC1.DB 库和VC2.DB 库都存在的场景,
在VC2.DB 中创建VC1.DB 里所
有的表和存储过程、函数,同时对这些新创建的表同步数据并创建镜像关系,
使创建了镜像关系的两张表完全一致。
后续对镜像关系的任意一边表做更改都
将同步到镜像关系的另一边的表中,使两张表完全一致。
VC1.DB 中的表
VC2.DB 中的表
本功能执行结果
T
VC2.DB 中创建T 的镜像表
T2
T2
VC2.DB 中T2 删除,
VC2.DB 中创建VC1.DB.T
的镜像表
T3
VC2.DB 中T3 无变化,没有任何影响
procedure1
VC2.DB 中创建procedure1 存储过程,但无镜
像关系
procedure2
VC2.DB 中procedure2 不受影响,无变化
注意
以库为单位创建表镜像,加了force 和不加force 的区别在于对同名表的处
理:
不加force 的sql 不对同名表创建镜像关系,会有warnings 报出失败信息;
加了force 的sql 对同名表强制创建镜像关系,将会删除VC2 中的同名表,
将VC1 中的同名表在VC2 中重建,使VC2 中该表的表结构和数据与VC1 中一致。

同时创建主表和镜像表

GBase 8a MPP Cluster 产品手册
4 管理员指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
217
在CREATE TABLE 语句中增加MIRROR TO 参数来实现同时创建主表和镜像
表。
CREATE TABLE VC1.DB.T1(A INT, B VARCHAR(10)) MIRROR TO VC2;
CREATE TABLE VC1.DB.T1 MIRROR TO VC2 AS SELECT * FROM
VC1.DB.T
如果VC2.DB 中存在T1 表则报错。
gbase> create table vc1.mirrdb.tx mirror to vc2 as select * from vc2.mirrdb.x;
Query OK, 1 row affected (Elapsed: 00:00:05.06)
注意
该语法不支持force 关键字
不支持create table like 指定镜像表

创建库的默认镜像VC
设置VC1.DB 库的默认镜像所在的VC 名(后续简称为默认镜像VC),用于
VC1.DB 和VC2.DB 已存在的场景下。如果VC2.DB 不存在则报错。
ALTER DATABASE VC1.DB SET DEFAULT MIRROR = VC2;
设置默认镜像VC 时,对VC1.DB 库和VC2.DB 库中已存在的表、存储过程、
视图没有任何影响。
设置默认镜像VC 完成后,VC1.DB 库和VC2.DB 库中之前已存在的表、存储
过程、视图无变化,没有镜像关系存在,任何操作(包括删除重建同名对象)
均不会做镜像同步。
设置默认镜像VC 完成后,VC1.DB 库和VC2.DB 库的镜像关系建立成功,镜
像关系的任意一侧(VC1.DB 或者VC2.DB)新创建的表、视图、存储过程以
及对这些对象的操作都会同时同步到镜像关系的另一侧,
使镜像关系两侧新建
立的表、视图、存储过程保持一致。
VC1.DB 中的表
VC2.DB 中的表
本功能执行结果
设置default VC 前已存在的对象
T、procedure1
DDL、DML
T3、procedure2
DDL、DML
不同步,无变动,互不影响
T2
DDL、DML
T2
DDL、DML
不同步,无变动,互不影响
设置default VC 后操作的对象
Table 、view 、
procedure
DDL、DML
同步到VC2.DB

GBase 8a MPP Cluster 产品手册
4 管理员指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
218
VC1.DB 中的表
VC2.DB 中的表
本功能执行结果
Table

view

procedure
DDL、DML
同步到VC1.DB
删除库的默认镜像VC 可以使用如下sql:
ALTER DATABASE VC1.DB SET DEFAULT MIRROR = null;

stcopy() 函数将以空终止的字符串从内存中一个位置复制至另一位置。

语法

void stcopy(from, to)
char *from, *to;
from
指向您想要 stcopy() 复制的以空终止的字符串的指针。
to
指向内存中 stcopy() 复制字符串的位置的指针。

示例

此样例程序在 demo 目录中的 stcopy.ec 文件中。
/*
* stcopy.ec *

This program displays the result of copying a string using stcopy().
*/

#include

main()
{
static char string[] = "abcdefghijklmnopqrstuvwxyz";

printf("STCOPY Sample ESQL Program running.\n\n");

printf("Initial string:\n [%s]\n", string);
/* display dest */
stcopy("John Doe", &string[15]); /* copy */

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 957 -
printf("After copy of 'John Doe' to position 15:\n [%s]\n",
string);

printf("\nSTCOPY Sample Program over.\n\n");
}
输出

STCOPY Sample ESQL Program running.

Initial string:
[abcdefghijklmnopqrstuvwxyz]
After copy of 'John Doe' to position 15:
[abcdefghijklmnoJohn Doe]

STCOPY Sample Program over.