SqlServer数据迁移Pgsql方案

将SqlServer数据库迁移到pgsql,分别尝试了以下几种方案。(最终用方法四解决)

示例的版本说明:SQLserver2019,pgsql 10。

方法一:Sqlserver链接服务器(不支持大数据迁移)

通过在Sqlserver中创建链接服务器,直接链接到pgsql。然后在查询分析器中通过[链接服务器].[数据库名].[表名]的方式读写pgsql的数据表。

此方式简单方便,在sqlserver中将查询的数据直接写入到pgsql数据表,能达到迁移数据的目的。

问题:只能导入少量数据(几千条),导入大几万条数到pgsql库时会出现“管道结束”的报错,链接服务器提供的共享内存无法支撑大数据,而且导入速度很慢。

方法二:通过ODBC数据源链接(不支持大数据迁移)

此方式与上述方法一类似,执行大数据读写的迁移语句时会出现超时提示。也是内存耗尽的问题。

方法三:导出Excel文件

Excel文件的xls格式仅支持65535行数据,而选择xlsx格式导出后,导入时提示格式不对,看来是无法支持xlsx格式。于是直接尝试方法四。

方法四:导出ACCESS数据库mdb文件+txt文件(推荐)

mdb方式迁移:

通过勾选多个表导出为Access数据库的mdb文件方式(100万条内)

因为Access数据库单表只支持2G大小即100万条以内的大多数的数据表可以用这种方式批量迁移(超出2G会报错提示数据库文件损坏)。而少数超过100万条数据表需要用导出txt文件的方式来实现迁移。

注意导出向导中选择导出驱动时,需要选对版本否则导入时会报错(比如字段长度转换有误之类各种异常)。 导出界面依据SQLserver版本不同有些差异,我本机同时安装SQL2008R2和SQL2019,所以可以有以下两种界面(如下)。

情况1.SQL2008R2导出界面

选择ACCESS驱动时应该选择版本12(其对应是2000-2003版本)

 数据源输入mdb文件地址(需要先新建一个空mdb文件)。然后直接点击测试提示连接成功。

情况2.SQL2019导出界面

导出mdb文件的驱动选择Microsoft Access中的“Access Database Engine”这项。

 然后选择要输出的mdb文件(需要预先新建)。

接下来就是选择需要导出的数据表了,一路下一步到完成。导出mbd数据成功。

导入

在navicat工具中,使用导出导入向导 ,选择mbd文件后会看到数据表,进行导入即可。

注意:

选择数据表导出生成mdb文件后,导入pgsql时出现“cannot initialize database”的提示。

需要安装AccessDatabaseEngine_X64

下载地址:https://download.csdn.net/download/quan278905570/36466612

安装后成功导入到pgsql数据库了。

导出txt文件迁移大数据表(100万条以上):

此方法比较简单,建议使用Navicat 导出文本方式,虽然SQLserver也能导出但Navicat导出更方便:SQLserver导入导出需要手动选择相应的编码方式和分隔符号(Navicat导入导出都默认了选择UTF-8和对应分隔符,一路Next即可),另外SQLserver导出的txt中对bool类型会转成字符串"False"和“True”,而Navicat是“0”和“1”更适用迁移数据。

Navicat导出选择tx导出方式后一路下一步即可生成txt文件(不建议选择sql脚本文件方式导出,数据量超过200万条后无法打开文件无法执行sql脚本)。导入pgsql时也是选择对应方式,即可完成。文本方式导出非常快(100万条3-5分钟),缺点是一次只能导一张表的数据,所以与mdb文件的方式相结合会更方便。

接下来就是在同源数据库中进行跨库数据迁移。

可以参见另一篇文章

pgsql:跨库访问其他数据库_奋斗鱼-CSDN博客

猜你喜欢

转载自blog.csdn.net/quan278905570/article/details/121101322