前言
在前篇 將 Microsoft SQL Server Database 資料轉到 PostgreSQL - BCP/Import 使用蠻花工的,
所以我們可以透過 EDB 的 Migration Toolkit 來幫我們將 MSSQL 的資料轉到 PostgreSQL 。
練習
安装 JDK
因為 Migration Toolkit 需要 JDK ,如果已安裝過,請跳過此步驟。
到 JDK下載解壓縮,我是放到 C:\jdk-15.0.2 目錄,
並設定環境變數 JAVA_HOME 設定為 C:\jdk-15.0.2,C:\jdk-15.0.2\bin 加到 Path 變數之中。
安装 Migration Toolkit
到 Migration Toolkit Download 下載直接安裝,
預設目錄為 C:\Program Files\edb\mtk 。
安裝 JDBC Drivers
因為我們會使用到 SQL Server 及 PostgreSQL ,所以就分別下載它們。
PostgreSQL 的 jar 檔直接 Copy 到 C:\Program Files\edb\mtk\lib 目錄,
SQL Server 的 JDBC Drivers 則解壓縮後,將 jtds-<版本號>.jar 檔也 Copy 到 C:\Program Files\edb\mtk\lib 目錄。
設定 toolkit.properties
開啟 “C:\Program Files\edb\mtk\etc\toolkit.properties” 設定來源 DB (MSSQL) 及 目標 DB (PostgreSQL)
1 | SRC_DB_URL=jdbc:jtds:sqlserver://127.0.0.1:1433/ms2postgre1 |
- 註: 目標 PostgreSQL DB 請先建立一個空的資料庫。
執行 runMTK.bat
設定完成後,開啟 Command 視窗,執行 runMTK.bat (這裡是將 MSSQL dbo 對應到 postgreSQL 的 public Schema)
1 |
|
如果執行時發生 Connection refused: connect 的錯誤,那應該是因為 MSSQL 沒有啟用 TCP/IP 的協定,
請參考 Microsoft SQL Server JDBC for Windows ,
開啟 Sql Server Configuration Manager ,選擇 [SQL Server 網路組態] -> [MSSQLSERVER 的通訊協定] 啟用 TCP/IP
在移轉過程中如果有發生錯誤,可以開啟 Log 檔來查看問題及最後的結果。
以下狀況無法轉檔成功
- SQL numeric 欄位設定成 IDENTITY
- varbinary 資料型態
另外,如果您的資料不是很多,則可以使用 ESF Database Migration Toolkit,
它的試用版可以轉每個資料表最多 50,000 筆資料。
參考資料
MigrationToolkit 数据库迁移工具的使用
將 Microsoft SQL Server Database 資料轉到 PostgreSQL - BCP/Import
將 Microsoft SQL Server Database 資料轉到 PostgreSQL - SSMS Export
Migration Toolkit Download
Microsoft SQL Server JDBC for Windows
Migration Toolkit User Guide
JDBC Drivers