将SqlServer数据库迁移到pgsql,分别尝试了以下几种方案。(最终用方法四解决)
示例的版本说明:SQLserver2012,pgsql 10,Navicat Premium15。
方法一:Sqlserver链接服务器(不支持大数据迁移)
通过在Sqlserver中创建链接服务器,直接链接到pgsql。然后在查询分析器中通过[链接服务器].[数据库名].[表名]的方式读写pgsql的数据表。
此方式简单方便,在sqlserver中将查询的数据直接写入到pgsql数据表,能达到迁移数据的目的。
问题:只能导入少量数据(几千条),导入大几万条数到pgsql库时会出现“管道结束”的报错,链接服务器提供的共享内存无法支撑大数据,而且导入速度很慢。
方法二:通过ODBC数据源链接(不支持大数据迁移)
此方式与上述方法一类似,在Sqlserver执行大数据读写的迁移语句时会出现超时提示。也是内存耗尽的问题。
方法三:导出Excel文件
Excel文件的xls格式仅支持65535行数据,而在Sqlserver中选择xlsx格式导出后,Navicat Premium导入时提示格式不对,看来是无法支持xlsx格式。于是直接尝试方法四。
方法四:导出DBase数据库(dbf文件)(推荐)
在Navicat Premium中,连接Sqlserver数据库,使用导出功能,选择DBase文件(*.dbf)方式,勾选要导出的多个数据表,或生成对应的多个dbf文件,一路下一步到完成。导出数据成功。
补充说明:在Sqlserver中也可以选择导出dbf,但使用Navicat Premium会更方便直接些,因为最终还是需要在Navicat查看数据。
其他导出方式中还有
导出Access数据库的mdb方式:过程比dbf繁琐,需要access驱动而且导出导入过程中容易出现和其他迁移方式一样的字段转换异常等问题。
txt导出文本方式:容易丢失原数据类型比如小数值长度,bool类型转换等问题。
dbf是我测试中用的最顺利和最简单可行的一种方式。
导入
在navicat工具中,使用导出导入向导 ,选择dbf文件后会看到数据表,进行导入即可。需要注意的是如果提示encode编码问题,需要在导入时选择编码(默认是UTF,或改为GB2312)。
接下来就是在同源数据库中进行跨库数据迁移。