SQLServer2PostgreSQL迁移过程中的几个问题

1、PostgreSQL 跨平台迁移工具Migration Toolkit的使用指南:http://www.enterprisedb.com/docs/en/8.4/mtkguide/Table%20of%20Contents.htm#TopOfPage

2、可能是程序的问题,迁移工具会把jtds驱动连接字符串认为是Oracle去连接,Google以后:http://my.oschina.net/congqian/blog/106518,找到这个指令指定数据源类型的方式来做操作:

Java -Dprop=toolkit.properties -jar lib/edb-migrationtoolkit.jar -sourcedbtype sqlserver -targetdbtype postgresql -allTables -targetSchema public dbo

3、用上面的工具迁移的过程中,我所发现的能够阻碍整个表迁移的问题是类型匹配问题,MSSQL的bit类型在Postgresql建表的过程中被建为boolean字段,但是数据加载的过程中却报错:完全无法把bit数据转化为boolean数据.我刚开始准备写Python脚本迁移这几个表,后来发现问题比较单一,直接把源表里的bit类型转化为smartint类型,然后迁移过来,准备再Postgresql里面再回去。(后加)比较诡异的是其中一个表的bit类型转移过去了,但是数据库的bit和Java代码中Byte类型无法兼容,还是得把字段类型改成smallini

4、接着上面问题说,3所做的数据迁移完成以后,修改了Web应用数据源配置文件,启动Web应用,做了几个前面改了类型的表的读写测试,发现正常可用,原来之前SQLServer中bit类型自动生成的hibernate ORM配置文件中bit对应的类型是java.lang.Byte,Byte是8位字节,smallint恰好也是8位,正好可以兼容可用。算是一个偶然运气事件吧。

5、再说一个问题,之前工具数据迁移的时候,系统经常提醒说UTF-8编码问题,我以为迁移过程中所有字符串数据自动会转换成UTF-8的数据,而Web应用之前是GBK编码,所以猜想是不是迁移完还得做编码集全体转换成UTF-8,但实际发现并不是这样,连之前用python在SQLServer里面查询出来带U字头的字符串,在Postgresql里面查出来好像已经不带U字头了。

6、RHEL6.0的PostgresSQL二进制版本的安装目录是/var/lib/pgsql ,与其它平台不同的是,数据文件和配置文件都在这个目录内的子目录内。

7、数据迁移后的处理,PostgreSQL中主键ID生成机制和SQLServer中的实现机制略有不同,从SQLServer的Identity到PostgreSQL中的Sequence,工具迁移的过程中,只复制数据,主键需要自己手动(或脚本)来设置,主键字段设置好以后,还要对每个sequence的当前值根据当前表的ID最大值做一次设置。我的Web应用项目是基于Hibernate的,因为Hibernate的配置文件也要修改:1、是修改主配置文件中的SQL方言类型;2、就是把每个表的主键生成机制由identity改为sequence(现在的版本这个设置一般是由@注解机制完成)

SQL Server是这样:

<id name="id" column="id" type="java.lang.Integer">
     <generator class="identity"/>
</id>  

改为PostgreSQL以后是这样:

<id name="id" column="id" type="java.lang.Integer">
    <generator class="sequence">
        <param name="sequence">此处是表ID对应的序列名称,你可以在AdminIII的序列目录中找到表对应序列名,一般序列的名字是Tablename_id_seq</param>
    </generator>   
时间: 2024-11-07 08:51:40

SQLServer2PostgreSQL迁移过程中的几个问题的相关文章

MyEclipse迁移过程中Tomcat版本不一致的解决办法

MyEclipse迁移过程中Tomcat版本不一致的解决办法 下面就是在MyEclipse2013迁移被Tomcat6.0X绑定的项目迁移到MyEclipse2014 Tomcat8.0X,报如下problems那栏的错误: 看见这个迁移过程中Tomcat版本不一致的错误,知道了就比较简单,不知道的时候就比较难了,解决办法如下: 1.查找到MyEclipse里面的菜单栏里面的MyEclipse 2.点击MyEclipse里面的Migrate Projects选项后,就出现如下图: 3.点击上图里

虚拟机迁移过程中网络状况测试的测试程序

最近一直在弄项目的虚拟机网络的配置,现在主要的问题就是要测试在我们进行虚拟机迁移的过程中的网络情况.于是写了一个网络测试程序,因为基于TCP连接的网络,网络是不会丢包的,所以为了更好的显示网络情况,本测试程序是基于UDP的. 客户端程序 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <netdb.h> #include

数据迁移过程中hive sql调优

本文记录的是,在数据处理过程中,遇到了一个sql执行很慢,对一些大型的hive表还会出现OOM,一步一步通过参数的设置和sql优化,将其调优的过程. 先上sql select t1.create_time from ( select * from beatles_ods.route where year=2017 and month=07 and day=01) t1 left outer join ( select * from (select *,row_number() over(part

解决svn迁移过程中出现:SVN Error: is not the same repository as的问题

一.背景 由于公司业务的需要,新购买了一批机器,那么面临着的就是svn等一系列东西进行迁移的问题,在svn迁移以后,本地的svn代码在切换时出现了SVN Error: 旧服务器地址 is not the same repository as 新服务器地址 的问题. 二.解决办法 在eclipse中进行该项操作总是会报这个错误.最后经查资料通过以下方式得到解决: 1.安装Tortoise 客户端,使用其Relocate功能进行解决. 2.“TortoiseSVN” → “Relocate”. 3.

MySQL迁移过程中遇到的问题

在迁移网站过程中,用phpmyadmin导出的数据库再次使用navicat 导入到另外的数据库的时候出错 出错提示为   #1064  - You have an error in your SQL syntax;---- 第一次分析 认为是错误提示里的一个语句语法错误后,单独把这个语法错误的表导入发现没有错误 第二次分析  认为是数据库表超出字符串氛围  后经修改测试发现仍不是错误原因 第三次  又重新使用phpmyadmin导出数据 发现与低依次导出的数据库大小有出入  接下来第三次导出发现

ADMT迁移之:在迁移过程中保留对源域资源的访问权限

之前发表过使用ADMT进行域对象迁移的文章,连接如下:http://blog.51cto.com/hubuxcg/1554925http://blog.51cto.com/hubuxcg/1554927最近再次使用ADMT进行域迁移时,碰到因SID筛选导致迁移后的用户无法访问源域中文件服务器问题,环境如下:源域:Contoso. Old 2008R2,新域:Contoso. Local 2008R2. 先来介绍下SID History,当在进行AD迁移或是重构时,SID History将在迁移或

wordpress博客服务器迁移过程中总结

(0)安装php环境 # yum install nginx php-fpm  php-mysql mysql-server php-mbstring php-gd php-pear php-mcrypt  php-mhash php-eaccelerator php-suhosin php-tidy php-curl (1) connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory) 当时弱弱的发

PHPCMS网站迁移过程后,添加内容 报500错误解决方案

问题出现原因:1.网站迁移过程中,上传下载文件时文件丢失  2.PHPCMS源码更新升级 解决方法 1.可以到官方下载最新版源码,替换过去.如果对源码有改动,需要先保存改动过的文件,替换过去之后,再替换上改动过的文件. 2.论坛有朋友总结出容易丢失出错的地方: /phpcms/modules/content/fields/video/form.inc.php 可以查看对比一下自己代码中这个文件下面/phpcms/modules/content/fields/video  跟原版源码是否一致,若不

漫谈游戏中的人工智能

写在前面   今天我们来谈一下游戏中的人工智能.当然,内容可能不仅仅限于游戏人工智能,还会扩展一些其他的话题. 游戏中的人工智能,其实还是算是游戏开发中有点挑战性的模块,说简单点呢,是状态机,说复杂点呢,是可以帮你打开新世界大门的一把钥匙.有时候看到知乎上一些可能还是前公司同事的同学的一些话,感觉还是挺哭笑不得的,比如这篇:http://zhi.hu/qu1h,吹捧机器学习这种玄学,对游戏开发嗤之以鼻.我只能说,技术不到家.Vision不够,这些想通过换工作可培养不来. 这篇文章其实我挺早就想写