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>

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

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

    MyEclipse迁移过程中Tomcat版本不一致的解决办法 下面就是在MyEclipse2013迁移被Tomcat6.0X绑定的项目迁移到MyEclipse2014 Tomcat8.0X,报如下pr ...

  2. All in One到”分布式“迁移过程中的坑

    为什么“分布式”要加引号? 与其他公司提高并发性能的场景可能不太一样,我们的系统之前是多个模块共用一个tomcat来运行的(All in One),模块有很多,光安装包就几十个.当某个模块或某几个模块 ...

  3. 阿里云数据库RDS迁移,DTS 迁移过程中,是否会锁表,对源数据库是否有影响?

    阿里云数据库RDS迁移,DTS 迁移过程中,是否会锁表,对源数据库是否有影响? DTS 在进行全量数据迁移和增量数据迁移的过程中,均不会对源端数据库进行锁表,因此在全量数据迁移和增量数据迁移的过程中, ...

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

    一.背景 由于公司业务的需要,新购买了一批机器,那么面临着的就是svn等一系列东西进行迁移的问题,在svn迁移以后,本地的svn代码在切换时出现了SVN Error: 旧服务器地址 is not th ...

  5. 数据迁移过程中hive sql调优

    本文记录的是,在数据处理过程中,遇到了一个sql执行很慢,对一些大型的hive表还会出现OOM,一步一步通过参数的设置和sql优化,将其调优的过程. 先上sql ) t where t.num =1) ...

  6. 记Django数据库迁移过程中遇到的一些问题

    首先描述一下问题,Django 数据库使用的mysql, 然后开始没注意,没建一个default库,就把第一个数据库当成默认的了,结果Django的admin相关的那些表,都自动生成到这个库里了,现在 ...

  7. SQL Server 2016升级迁移过程中性能问题诊断案例

    日常运行的批量更新作业,平日是5分钟之内结束,今天出现超过30分钟没结束的情况,实际运行3个小时以上,应用程序超时报错. 数据库版本:SQL Server 2016企业版 问题SQL: declare ...

  8. win-Linux文件脚本迁移过程中的问题 syntax error: unexpected end of file

    问题:  在win下写好的shell脚本,放到Linux上测试sh -n报错如下 ORA_check.sh: line 251: syntax error: unexpected end of fil ...

  9. 如何将已部署在ASM的资源迁移到ARM中

    使用过Azure的读者都知道,Azure向客户提供了两个管理portal,一个是ASM,一个是ARM,虽然Azure官方没有宣布说淘汰ASM,两个portal可能会在很长的一段时间共存,但是考虑到AR ...

随机推荐

  1. Linux下jetty报java.lang.OutOfMemoryError: PermGen space及Jetty内存配置调优解决方案

    Linux下的jetty报java.lang.OutOfMemoryError: PermGen space及Jetty内存配置调优解决方案问题linux的jetty下发布程序后再启动jetty服务时 ...

  2. 【shell脚本】ftp自动上传mysql备份文件

    上一篇中 mysql每日备份shell脚本 给出了使用mysqldump备份到本地的脚本,接着下面是利用ftp把备份文件传输到远程服务器的脚本. 当然也可以用scp,rsync等等方案. #!/bin ...

  3. maven -Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME

    遇到错误:-Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME解决办法:在环境变量中设置M2_HO ...

  4. Windows下配置nginx+FastCgi + Spawn-fcgi

    前提: 下载nginx, FastCgi, Spawn-fcgi Spawn-fcgi有个Windows的版本,但不能在VS中编译,这里有一个编译好的版本:http://download.csdn.n ...

  5. 小老虎的微信公众号:iITObserve

    小老虎的微信公众号:iITObserve 现在,都流行玩微信. 现在,都流行玩微信公众号. 所以,博客已经Out啦! 原来是微博,现在是微信.真的,时代发展太快了. 偶赶紧也弄了一个,尝尝鲜. 偶的微 ...

  6. JAVA之旅(五)——this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块

    JAVA之旅(五)--this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块 周末收获颇多,继续学习 一.this关键字 用于区分局部变量和成员变量同名的情况 ...

  7. STL - string(典型操作demo)

    1String概念  string是STL的字符串类型,通常用来表示字符串.而在使用string之前,字符串通常是用char*表示的.string与char*都可以用来表示字符串,那么二者有什么区别呢 ...

  8. saiku中文查询(鉴于有人提问:saiku执行mdx,有中文报错)

    有人问我saiku的中文查询问题: saiku默认执行英文,很多人,在mysql里录入了中文,使用sql语言查询没有问题. 可是,用saiku的mdx查询,就会报错. 这是因为mysql默认支持中文查 ...

  9. how tomcat works 五 servlet容器 上

    servlet容器是用来处理请求servlet资源,并为Web客户端填充response对象的模块.在上一篇文章(也就是书的第四章)我们设计了SimpleContainer类,让他实现Containe ...

  10. java 多线程和线程池

    ● 多线程 多线程的概念很好理解就是多条线程同时存在,但要用好多线程确不容易,涉及到多线程间通信,多线程共用一个资源等诸多问题. 使用多线程的优缺点: 优点: 1)适当的提高程序的执行效率(多个线程同 ...