暂无图片
暂无图片
15
暂无图片
暂无图片
暂无图片

openGauss 7.0.0-RC2 特性解读|DataKit 迁移 PostgreSQL 至 openGauss

Gauss松鼠会 2025-10-27
708
DataKit 是一款基于 Web 的 openGauss 可视化平台系统,以资源(物理机、数据库)为统一底座,通过插件化架构集成开发运维工具。各插件围绕 DataKit 资源中心进行扩展,彼此独立,便于用户按需引入,实现数据库的运维、监控、迁移、开发、建模等复杂操作。该平台旨在降低 openGauss 数据库的使用和管理门槛,提供一键部署、卸载、组件化安装、多版本升级、日常运维、监控、安全中心及插件管理等一体化功能,帮助用户更便捷、安全地管理 openGauss 数据库。

Part.01

迁移特性介绍
DataKit 7.0.0-RC2 版本中,data-migration 插件新增了对 PostgreSQL 数据库的迁移支持。 该工具提供从 PostgreSQL 到 openGauss 的初始全量数据与对象(包括视图、触发器、函数、存储过程等)迁移能力,并支持增量数据(DML)的持续同步,实现数据与对象的完整迁移。
在数据迁移精度与类型方面,全量迁移阶段支持 PostgreSQL 中各种数据类型的迁移,同时对于浮点类型(如 decimal、numeric、double precision、real),能够确保迁移后数据精度无损。在增量迁移过程中,工具能够捕获并迁移全量与增量阶段产生的所有数据变更,保障数据一致性。
目前支持的迁移阶段包括:全量迁移、增量迁移与反向迁移,数据校验功能暂未开放。

Part.02

迁移工具安装
DataKit 安装指导请参考
https://gitcode.com/opengauss/openGauss-workbench/tree/7.0.0-RC2
PostgreSQL 数据迁移功能由 DataKit 的 `data-migration` 插件提供。安装 DataKit 后,请按以下步骤确认或安装该插件:
  1. 进入 DataKit 平台的 “插件管理” 菜单;
  2. 检查插件列表中是否已安装 “data-migration” 插件;
  3. 如未安装,请点击页面的 “安装插件” 功能,手动安装数据迁移插件。

Part.03

迁移功能使用
添加数据库
在 DataKit 页面,资源中心-实例管理中添加所需迁移的 PostgreSQL 数据库以及 openGauss 数据库。

添加服务器
在 DataKit 页面,资源中心-服务器管理中添加一台 Linux 服务器,支持的系统架构有:CentOS7 x8664、openEuler20.03 x8664、openEuler20.03 aarch64、openEuler22.03 x8664、openEuler22.03 aarch64、openEuler24.03 x8664、openEuler24.03 aarch64。此时添加的服务器,将用于安装 PostgreSQL 的迁移工具。

服务器添加用户
服务器添加成功后,可在服务器列表中看到已添加的服务器,点击对应服务器“用户管理”功能,进行服务器其他用户的添加。迁移工具仅可安装在服务器非 root 用户下,因此请确保“用户管理”中包含有非 root 用户。

安装迁移工具
在 DataKit 页面,数据迁移-迁移工具管理中选择已添加的服务器,进行迁移工具安装。
迁移工具运行需要 JDK 17+环境,请在安装用户下配置好 Java 17+的环境变量。
迁移工具安装方式支持在线安装、离线安装和已安装。其中在线安装,需要安装的 Linux 服务器可正常连接外网,安装时会直接从外网下载安装包到安装目录中进行安装;离线安装则需要用户手动下载好安装包后,从前端页面上传安装包进行安装;已安装则用于绑定服务器上已经安装好的迁移工具。
迁移工具安装包获取

https://gitcode.com/opengauss/openGauss-migration-portal/tree/master/multidb-portal


创建迁移任务
在 DataKit 页面,数据迁移-迁移任务中心中创建迁移任务,并管理所有的迁移任务。

启动迁移任务
创建迁移任务成功,迁移任务中心页面的任务列表中会展示已有任务,选择上一步创建的任务,点击启动。

查看迁移进度
迁移任务启动后,点击对应迁移任务记录,可展开查看迁移任务的详细配置信息,再次点击下拉中的任务 ID,则可查看迁移进度详情信息。

结束迁移任务
进入迁移任务中心,选择对应正在迁移的迁移任务,点击结束迁移。

Part.04

SQL Server 迁移至 openGauss
特性介绍
openGauss 7.0.0-RC2 版本新引入了 oGdatasyncfull_migration 迁移工具。该工具基于 Java 开发,用于实现从 SQL Server 到 openGauss 的离线全量迁移。
oGdatasyncfull_migration 支持全量数据与数据库对象的完整复制:
  • 全量数据迁移:采用多表并行复制机制,提升迁移效率;
  • 全量对象迁移:支持表、约束、索引、外键、视图、函数、触发器、存储过程、序列等多种数据库对象的同步迁移。
注意事项
一般性限制
  1. 工具支持的 SQLServer 版本为 2016+,openGauss 版本为 7.0.0+
  2. 创建 openGauss 迁移库时需要指定编码格式与 SQLServer 一致
  3. 列存储索引、全文索引、xml 索引、包含列索引以及索引的填充因子暂不支持迁移
  4. time、datetime2、datetimeoffset 在 SQL Server 中精度默认为 7,openGauss 仅支持 0-6,通过配置文件的 isTimeMigrate 参数控制是否接受精度损失
  5. SQL Server 中 money 和 smallmoney 数据类型精确到它们所代表的货币单位的万分之一,openGauss 的 money 类型精确到它们所代表的货币单位的百分之一,该参数控制是否迁移货币类型
  6. 表和列的注释暂不支持迁移
  7. 几何类型(geometry 和 geography)暂不支持迁移
  8. SQL Server 的 real(4 字节)精度约为 7 位十进制数字,float(8 字节)类型约为 15~16 位十进制数字,openGauss 分别为 6 位和 15 位,迁移前后可能有有微小差别
  9. 由于 SQL Server 分区表底层均基于 Range 分区实现,所以目前迁移到 openGauss 均为 Range 类型
  10. 视图、函数、触发器和存储过程目前仅支持迁移流程,迁移成功还需语法兼容
对象迁移限制
由于内核兼容性在持续增强,对象迁移采用先透传再翻译的原则进行,即先直接透传对象创建语句在 openGauss 端执行,若执行失败,再借助开源三方件 druid 进行翻译。
迁移工具获取地址:

https://opengauss.org/zh/tools/


下载安装包后,解压即可完成安装。
wget https://opengauss.obs.cn-south-1.myhuaweicloud.com/7.0.0-RC2/tools/oG_datasync_full_migration-7.0.0rc2.tar.gz
tar -zxvf oG_datasync_full_migration-7.0.0rc2.tar.gz

解压后目录结构如下:
├── oG_datasync_full_migration
├──── build_commit_id.log
├──── oG_datasync_full_migration-7.0.0rc2.jar
├──── config
└────── config.yml

配置文件说明
配置文件使用 yaml 文件规则配置,需要特别注意对齐,缩进表示层级关系,缩进时不允许使用 Tab 键,只允许使用空格,缩进的空格数目不重要,但相同层级的元素左侧需要对齐。
# global settings
# 是否记录进度
isDumpJson:true
# 是否删除迁移成功的csv文件
isDeleteCsv:true
# 是否保留原有schema
isKeepExistingSchema:false
# 目标端数据库配置
ogConn:
host:"192.168.0.2"
port:5432
user:"username"
password:"password"
database:"database"
charset:"utf8"
params:
sourceConfig:
# 查询表的线程数
readerNum:4
# 写表的线程数
writerNum:4
# 全量数据文件大小划分配置,支持K、M、G大小配置,没有单位默认按照M单位处理,默认值为 2M
fileSize:2M
# 源端数据库连接信息
dbConn:
host:"192.168.0.1"
port:"1433"
user:"username"
password:"password"
database:"database"
charset:'utf8'
connectTimeout:10
# schema映射关系
schemaMappings:
test:ogtest
# 复制表白名单,不配置则复制所有表
limitTables:
-test.Students
# 复制表黑名单
skipTables:
# 目标端建表添加with(segment=on)选项;opengauss迁移至openGauss时,源端表有with(segment=on),迁移时会默认添加
addSegmentTables:
csvDir:/**/**
# sqlserver中time,datetime2和datetimeoffset类型精度为0-7,openGauss中对应类型精度为0-6,可能会有精度损失,该参数控制是否迁移这三种类型
isTimeMigrate:true
# sqlserver中money和smallmoney数据类型精确到它们所代表的货币单位的万分之一,openGauss的money类型精确到它们所代表的货币单位的百分之一,该参数控制是否迁移货币类型
isMoneyMigrate:true
# 是否迁移源库的默认值到openGauss
isMigrateDefaultValue:Yes
# 是否记录快照
isRecordSnapshot:No

迁移命令
1. 迁移表
java -jar oG_datasync_full_migration-7.0.0rc2.jar --start table --source sqlserver --config **/**/config.yml

2. 迁移主键
java -jar oG_datasync_full_migration-7.0.0rc2.jar --start primarykey --source sqlserver --config **/**/config.yml

3. 迁移外键
java -jar oG_datasync_full_migration-7.0.0rc2.jar --start foreignkey --source sqlserver --config **/**/config.yml

4. 迁移索引
java -jar oG_datasync_full_migration-7.0.0rc2.jar --start index --source sqlserver --config **/**/config.yml

5. 迁移视图
java -jar oG_datasync_full_migration-7.0.0rc2.jar --start view --source sqlserver --config **/**/config.yml

6. 迁移函数
java -jar oG_datasync_full_migration-7.0.0rc2.jar --start function --source sqlserver --config **/**/config.yml

7. 迁移触发器
java -jar oG_datasync_full_migration-7.0.0rc2.jar --start trigger --source sqlserver --config **/**/config.yml

8. 迁移存储过程
java -jar oG_datasync_full_migration-7.0.0rc2.jar --start procedure --source sqlserver --config **/**/config.yml

9. 迁移序列
java -jar oG_datasync_full_migration-7.0.0rc2.jar --start sequence --source sqlserver --config **/**/config.yml

默认的类型转换规则
列类型转换
SQL Server
openGauss
备注
tinyint
tinyint
兼容
smallint
smallint
兼容
int
int
兼容
bigint
bigint
兼容
bit
boolean
兼容
decimal
decimal
兼容
numeric
numeric
兼容
money
money
兼容
smallmoney
money
兼容
float
float
兼容,float(24)会以 real 类型迁移
real
real
兼容,相当于 float(24)
double precision
float
兼容,相当于 float(53)
char
char
兼容
varchar
varchar
兼容
nchar
nchar
兼容
nvarchar
nvarchar
兼容
ntext
text
兼容
binary
bytea
兼容,bytea 不指定长度,最大为 1GB-8203 字节
varbinary
bytea
兼容,bytea 不指定长度,最大为 1GB-8203 字节
image
text
暂未支持 longtext 类型,后续兼容性适配,超范围的文本会报错
text
text
暂未支持 longtext 类型,后续兼容性适配,超范围的文本会报错
date
date
兼容
datetime
timestamp
兼容
smalldatetime
timestamp
兼容
time
time[(p)][without time zone]
SQL Server 精度 0-7,默认 7,openGauss 仅支持 0-6,通过配置文件的 isTimeMigrate 参数控制是否接受精度损失
datetime2
timestamp
SQL Server 精度 0-7,默认 7,openGauss 仅支持 0-6,通过配置文件的 isTimeMigrate 参数控制是否接受精度损失
datetimeoffset
timestamp[(p)][with time zone]
SQL Server 精度 0-7,默认 7,openGauss 仅支持 0-6,通过配置文件的 isTimeMigrate 参数控制是否接受精度损失
hierarchyid
nvarchar(4000)
不兼容
json
jsonb
SQLServer 的 json 类型底层为 nvarchar
rowversion
timestamp
jdbc 查询该类型为 timestamp
sql_variant

暂不支持,后续兼容性适配
uniqueidentifier
uuid
兼容
xml
xml
兼容
索引类型转换
SQL Server
openGauss
备注
Clustered Index
B-tree Index
待兼容性支持
Non-Clustered Index
B-tree Index
待兼容性支持
Unique Index
Unique Index
待兼容性支持
Full-Text Index

不兼容
Spatial Index
Gist Index
兼容
XML Index

不兼容
Filtered Index
索引 including 列
仅 Ustore 类型数据库支持

END



Gauss松鼠会
汇集数据库从业人员及爱好者
互助解决问题 共建数据库技术交流圈


最后修改时间:2025-10-27 09:56:55
文章转载自Gauss松鼠会,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论