前言
以下筆者將介紹如何將 Microsoft SQL Server Database 資料轉到 PostgreSQL Database。
環境 : Windows Server 2019, Microsoft SQL Server 2019, PostgreSQL V.13
使用的方式是先將 MSSQL資料表 建立到 PostgreSQL ,
再透過 BCP 將資料轉成 csv 後,再 Import 到 PostgreSQL
實作
準備資料請參考 將 Microsoft SQL Server Database 資料轉到 PostgreSQL - SSMS Export
轉出 Table Schema
透過 SSMS 將資料表 Schema 轉成 Script, 在 ms2postgre1 DB 上按右鍵選擇 工作->產生指令碼(E)

先產生資料表 Schema

只產生 Schema (它還可以產生資料, Schema & Data),我們只需要 Schema

再來就將它存成檔案(msschema.sql)

轉成 PostgreSQL Table Schema
再來要透過 sqlserver2pgsql 來將 MSSQL Table Schema Script 轉成 PostgreSQL 的 Table Schema Script。
因為它需要 Perl ,所以請 Download Perl 並安裝它。
開啟 Command 視窗執行 sqlserver2pgsql
1 |
|

執行完成後,會產生 3 個script 檔,可以查看檔案的內容
ob_script 是建立 table schema
oa_script 是建立 table 的 primary key
最後就是 check 一下 ou_script 的內容
因為這次只是建立 table ,所以 ou_script 裡面並沒有任何有影響的 script
透過 psql 執行 script 檔
檔案產生好之後,就可以直接透過 psql 來執行,我安裝的版本是 13 ,所以 path 預設是 C:\Program Files\PostgreSQL\13\bin
切到該目錄後,依續執行 Script,
1 |
|

1 |
|

執行完成後,就可以到 PostgreSQL 查看 DB 中是否已建立好 Table1 & Table2 這2個 Table

透過 bcp 轉出資料
資料表完成了,就可以將資料轉成 csv 來匯入,預設的分隔符號為 tab, 並以 UTF8 編碼
1 |
|

- -C 65001 : 是設定輸出的編碼為 UTF-8
轉入資料
table 建立好了,資料檔也準備好了,就可以將資料匯入,所以在 Table 上面按右建,選取 Import/Export…

設定 Import ,選取檔案, Format 選擇 csv, 設定編碼為 UTF-8 ,分隔符號為 tab

按下 ok 後,就可以將資料轉入
- 也可在 psql 中執行 copy public.table2 FROM ‘C:\MSSQL2PostgreSQL\Table2.csv’ DELIMITER E’\t’ ENCODING ‘UTF8’ NULL AS ‘’;
2個檔案都轉入完成後,可以查看資料是否正確,以下我們查看 Table2 的資料

參考資料
sqlserver2pgsql
Perl Download
將 Microsoft SQL Server Database 資料轉到 PostgreSQL - SSMS Export