openGauss
开源数据库
openGauss社区官网
开源社区
关于迁移SQL server到openGauss的问题和解决
关于迁移 SQL server 到 openGauss 的问题和解决
背景
2020 年 9 月份,在将 SQL server 内容迁移到 openGauss 数据库的过程中,由于 openGauss 开源不久,我在迁移的过程中遇到了许多问题。通过对源码的阅读和实际调试,最后逐个解决。在这里,我对两个数据库之间的不同和相同分别做对比,提供一个实际参考。(之所以列出相同,是为了更放心地使用)
- openGauss 版本:1.0.1
- SQL server 版本:2008
对比
以下所有内容均基于具体使用,因此将涵盖使用中较基本方面。
整体结构
- 相同
SQL server 和 openGauss 同为关系型数据库,创建数据库和使用基本相同,当然 openGauss 数据库相比其他开源数据库主要有复合应用场景、高性能和高可用等产品特点,在不同之处基本可以解决。
- 相异
openGauss在pg_temp开头的schema中有系统临时表,当然也有全局和本地两种临时表,创建时指定TEMP或TEMPORARY关键字,可创建为临时表 |
数据类型
- 相同
- 数值类型:INT、INTEGER、SAMALLINT、BIGINT 包括对应数组基本用法相同。
- 货币类型和布尔类型使用基本相同。
- 字符类型:定长和变长的 CHAER 和 VARCHAR 用法基本相同;TEXT、name 也可互通使用
- 相异
表操作
- 相同
创建表和删除表基本相同
多表查询基本相同,如下:
集函数用法基本一致
- 相异
主要是系统表的使用差别
函数对比
- 相同
- while 函数、集函数、exist 函数等简单函数基本一致
left\(str text, n int\)、right\(str text, n int\)、length\(string bytea, encoding name \)replace\(string text, from text, to text\)ltrim\(string \[, characters\]\)、rtrim\(string text \[, characters text\]charindex
函数
- 相异
替换子字符串函数stuff ( character_expression1 , start , length , character_expression2 ) | overlay(string placing string FROM int [for int])完美替换stuff()函数 |
存储过程
- 相同
SQL server 和 openGauss 在存储过程中的相同点较少,基本上的逻辑基本相同。
- 存储过程均支持输入(in)、输出(out)参数。
- 存储过程答题逻辑相似。
- 相异
由于begin-end是执行结构,因此,存储过程body中所有添加begin-end结构的都不需要再添加,即整个存储过程一套begin-end结构 | |
因为SELECT INTO不能在存储过程中使用,会报错tablename不存在。 解决:使用CREATE TABLE AS语法替代SELECT INTO | |
- 以上均为问题解决方法,具体语句可以看开源社区的格式openGauss 社区
总结
SQL server 和 openGauss 由于都是关系型数据库,大体结构、基本数据类型、表操作和函数重合点很高,但是存储过程方面基本上需要全部仔细修改,逐渐调试并找到解决办法。以上所有都来自于实操,并成功迁移。