更新时间:2024-09-18 GMT+08:00

语法转换说明

日期时间函数转换说明

在使用UGO进行语法转换时,如果所选目标库为GaussDB 3.2或3.2以下的版本,GaussDB部分时间函数与事务相关详情可参见表1。这些函数返回的都是事务的开始时间,而在源库中获取的为系统当前时间,在长事务的场景下,源库和目标库GaussDB得到的时间不一致。因此在UGO转换后,如果转换后的语句中存在上述函数,则用户需要自行分析上述函数是否存在长事务中并确认影响,如有影响需手工修改保证最终的准确性。

表1 与事务相关的时间函数说明

序号

函数名称

1

CURRENT_DATE

2

CURRENT_TIME

3

CURRENT_TIME(precision)

4

CURRENT_TIMESTAMP(precision)

5

LOCALTIME

6

LOCALTIMESTAMP

7

LOCALTIME(precision)

8

LOCALTIMESTAMP(precision)

Oracle -> GaussDB

GaussDB只支持普通的SYNONYM同义词,不支持PUBLIC同义词。UGO会将Oracle中的PUBLIC同义词转换为GaussDB中public schema下的普通同义词对象,从而实现与Oracle中等效的功能,可参见表2

当您的数据库中不同用户拥有同名的public同义词时,该方案会将两个用户的同义词对象均转换到public schema下,造成同义词对象冲突,所以需要对不同用户中同名的同义词完成本地改造后再进行迁移,可参考下表表3

表2 语法转化1

Oracle源库中sql语句

GaussDB目标库转化后的sql语句

CREATE PUBLIC SYNONYM u1.syn FOR u1.object1;

CREATE SYNONYM public.syn FOR u1.object;

表3 语法转化2

Oracle源库中sql语句

GaussDB目标库转化后的sql语句

是否存在同义词冲突

CREATE PUBLIC SYNONYM u1.syn FOR u1.object1;

CREATE SYNONYM public.syn FOR u1.object1;

CREATE PUBLIC SYNONYM u2.syn FOR u1.object2;

CREATE SYNONYM public.syn FOR u2.object2;

PostgreSQL迁移到GaussDB

模式兼容性:

  • PostgreSQL 支持迁移到 GaussDB(O模式);
  • GaussDB(O模式)中将空字符串存储为 NULL,执行SQL语句“ select '' is null;”结果为True,与 Oracle 数据库行为一致;

影响范围:

  • 如果源库是 PostgreSQL,目标库是 GaussDB(O模式),则需要适配改造涉及空字符串或 NULL 语法的 SQL。
  • 影响范围包括 DML、DDL、系统函数,例如 SQL语句“ select '' is null;”“select regexp_matches('test1', 'test1', '');”
  • UGO 评估功能支持评估PostgreSQL到GaussDB 链路中 “IS NULL ”空字符串语法。

Microsoft SQL Server 到 MySQL

Microsoft SQL Server的DATETIME数据类型支持和数字加减运算,但是UGO无法准确识别此场景,建议使用MySQL中的DATE_ADD函数进行相应改造。