2008-08-20 171 views
26

我們目前正在使用MySQL作爲我們正在構建的產品,並且希望儘快遷移到PostgreSQL,主要用於授權原因。從MySQL遷移到PostgreSQL

有沒有其他人做過這樣的舉動?我們的數據庫是應用程序的命脈,最終會存儲TB數據,所以我很想聽聽性能改進/丟失的經驗,轉換SQL和存儲過程的主要障礙等。

編輯:Just向那些問我們爲什麼不喜歡MySQL許可的人士澄清。我們正在開發一種商業產品(目前)依賴MySQL作爲數據庫後端。他們的許可證狀態我們需要向他們支付我們每次安裝的清單價格的百分比,而不是固定費用。作爲一家創業公司,這不如吸引人。

+0

關於這個問題有一些很好的技術文章在這裏:http://wiki.postgresql.org/wiki/Converting_from_other_Databases_to_PostgreSQL – user13550 2008-09-16 20:39:06

+0

複製也許是一個問題你。 MySQL支持它開箱即用。 – 2008-09-17 17:45:06

回答

27

史蒂夫,我不得不遷移我的舊應用程序,即PgSQL-> MySQL。我必須說,你應該考慮自己是幸運的;-) 常見的問題有:

  • SQL實際上是非常接近的語言標準,所以你可以從MySQL的方言遭受你已經知道
  • MySQL的悄然截斷VARCHAR處理該超過最大長度,而Pg抱怨 - 快速解決方法是將這些列作爲'文本'而不是'varchar'並使用觸發器來截斷長行
  • 使用雙引號代替反撇號
  • 使用布爾字段進行比較IS和IS不是運算符,但是與MySQL兼容的INT(1)使用=和<>仍然是可能的
  • 有沒有更換,使用DELETE/INSERT組合
  • PG是強制執行外鍵的完整性相當嚴格,所以不要忘記在引用ON DELETE CASCADE使用
  • 如果您使用PHP與PDO,記得一個參數傳遞給lastInsertId()方法 - 它應該是序列的名字,這是創建通常是這樣的:[表名] _ [primarykeyname] _seq

我希望幫助至少一點。和Postgres玩得很開心!

13

我做了類似的轉換,但出於不同的原因。這是因爲我們需要更好的ACID支持,並且能夠讓網絡用戶通過其他數據庫工具查看相同的數據(兩者都有一個ID)。

這裏有一點我們的事:

  1. MySQL不會強制約束 作爲嚴格的PostgreSQL的。
  2. 有不同的日期處理例程。這些將需要手動轉換。
  3. 任何不符合ACID 規範的代碼都可能是一個問題。

這就是說,一旦它到位並經過測試,就會更好。出於安全原因和繁重的併發使用,正確鎖定後,PostgreSQL表現比MySQL好。在不需要鎖定的情況下(只讀),性能不太好,但仍然比網卡要快,所以這不是問題。

提示:

  • 的自動化腳本在contrib 目錄是轉換一個很好的起點 ,但需要 ,通常可觸及一點點。
  • 我強烈建議您將 作爲默認值使用可序列化的隔離級別 級別。
  • pg_autodoc工具很好, 真的看到你的數據結構和 幫助找到你忘記定義和強制執行的任何關係 。
3

我們從MySQL3遷移到PostgreSQL 8.2,然後是8.3。 PostgreSQL具有SQL的基礎,還有更多,所以如果你的MYSQL不使用花哨的MySQL的東西,你會沒事的。

根據我的經驗,我們的MySQL數據庫(版本3)沒有外鍵...... PostgreSQL讓你擁有它們,所以我們必須改變這個......這是一件好事,我們發現了一些錯誤。

我們不得不改變的另一件事是編碼(C#)連接器在MySQL中不一樣。 MySQL之一比PostgreSQL更穩定。我們在PostgreSQL上仍然有一些問題。