從 SQL Server 2008 遷移到 Postgres 9.2
我在共享虛擬主機上有一個相當大的數據庫(2 GB 數據,最大表中有 2500 萬行)。數據庫引擎是 Microsoft SQL Server 2008。
由於 SQL Server 網路託管的高額費用,我想將我的數據從 SQL Server 遷移到 Postgres 數據庫。
在我的 SQL Server 數據庫中,我有表、索引、約束和儲存過程。我的表中的數據類型是
VARCHAR
、TINYINT
、SMALLINT
、INT
、SMALLDATETIME
和。REAL``FLOAT
在我的儲存過程中,我使用了一些內置的 T-SQL 日期/時間操作函式,例如
DateAdd()
orDatePart()
。是否有任何可用的免費工具可以幫助我將數據(表、約束,如果可能還有儲存過程)從 SQL Server 遷移到 Postgres?
早在 2005 年,我就編寫了一個流程,使用 bcp 轉儲數據,然後 pg_import 數據並執行所有必要的架構腳本和轉換。由於語法差異,Procs 略有不同。
TinyInt 和 SmallDateTime (AFAIK) 是非 SQL 標準數據類型。編輯:最接近的 SQL 標準類型分別是 SMALLINT 和 TIMESTAMP。我建議您在遷移之前使用這些類型轉換列,以查看您是否發現應用程序存在任何問題。您可以在遷移之前解決這個問題,或者在清單中註明以供之後使用。與 TIMESTAMP (AFAIK) 最接近的 MSSQL 等效項是 DATETIME2。
我相信大多數表格創建腳本只需少量編輯即可執行。如果您使用 SQL Server 的一些獨特功能,創建額外的索引可能會更麻煩。一個體面的 DB 案例工具可以使轉換變得不那麼困難(抱歉,不知道免費的 - 我們在這裡使用 ER/Studio 來處理 MSSQL)。
儲存過程——這才是真正的痛苦所在。您必須學習 PL/pgSQL 並將您的邏輯轉換為它。由於在一個數據庫引擎上使用的技巧很有可能無法在另一個引擎上工作/獲得非常糟糕的性能,因此請讓 Postgres 數據庫開發人員幫助您。
編輯:雖然數據庫案例工具可以將數據庫結構從引擎轉換為另一種引擎,但我堅信將儲存過程從過程語言轉換為另一種的工具會造成比進步更大的傷害。