Sql-Server

將 PostgreSQL 數據庫遷移到 MS SQL 2005 的最佳工具?

  • June 13, 2019

我在 PostgreSQL 8.3.1 中有一個數據庫,我想遷移到 MS SQL Server 2005(或者可能是 2008),包括表模式和數據。該數據庫大小約為 50GB,大約有 400,000,000 行,所以我認為簡單的 INSERT 語句是不可能的。誰能推薦執行此遷移的最佳工具?顯然它需要可靠,因此目標數據庫中的數據與源數據庫中的數據完全相同,並且它需要能夠在合理的時間內複製該數據量。

我最終沒有使用任何第三方工具來處理數據,因為我嘗試過的工具都沒有為大表工作。甚至 SSIS 也失敗了。不過,我確實為架構使用了商業工具。所以我的轉換過程如下:

  1. 完全轉換企業以複製架構(無數據​​)。
  2. pg_dump以“純文字”格式從 Postgres 導出數據,這基本上是一個製表符分隔值 (TSV) 文件。
  3. 用於將導出的文件轉換為 bcp 可以理解的格式的 Python 腳本。
  4. bcp將數據導入 MSSQL。

轉換步驟處理了 pg_dump 和 bcp 使用的格式的一些差異,例如:

  • pg_dump 將一些 Postgres 特定的東西放在文件的開頭並以“.”結束數據,而 bcp 期望整個文件包含數據
  • pg_dump 將 NULL 值儲存為“\N”,而 bcp 不需要任何東西來代替 NULL(即,列分隔符之間沒有數據)
  • pg_dump 將製表符編碼為“\t”,換行符編碼為“\n”,而 bcp 按字面意思處理這些
  • pg_dump 總是使用製表符和換行符作為分隔符,而 bcp 允許使用者指定分隔符。如果數據包含任何製表符或換行符,這將變得很有必要,因為它們沒有被編碼。

我還發現一些在 Postgres 中很好的獨特約束在 MSSQL 中被違反了,所以我不得不放棄它們。這是因為在 MSSQL 中 NULL=NULL(即 NULL 被視為唯一值),但在 Postgres 中則不然。

引用自:https://serverfault.com/questions/65407