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>   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM