2011-11-28 39 views
0

我做錯了什麼?這個命令不起作用。我試圖從MySQL遷移到PostgreSQL。MySQL轉儲兼容不起作用

mysql> mysqldump --compatible=postgresql dbname > /tmp/table.sql; 

我不斷收到錯誤。

錯誤1064(42000):您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第1行'mysqldump --compatible = postgresql dbname < /tmp/table.sql'使用正確的語法。

我在做什麼錯?有沒有更簡單的方法來轉換數據庫?我已經閱讀了大量的遷移文章,但這似乎是eaiser開始轉換的方式。

回答

3

mysqldump是一個從os命令行運行而不是mysql命令行的程序。退出mysql並在那裏執行它應該沒問題。

+1

現在我覺得很蠢。大聲笑。看看當你依賴Windows GUI(SQLyog)太久會發生什麼?你忘了cmd線的東西。謝謝,明白了。 –

9

唐是對眼前的問題很正確。不過,除此之外還有更多。

MySQL的mysqldump兼容模式不會產生DDL,您可以直接將它加載到其他數據庫中。沒有通用的便攜方式來表達諸如AUTO_INCREMENT之類的東西,因此轉儲必須保留類似MySQL的特定功能,或者將其替換爲不帶自動增量行爲的int類型。無論使用哪種方法,您都必須編輯轉儲以用SERIAL僞類型字段替換舊的AUTO_INCREMENT字段。

MySQL和PostgreSQL之間的類型名稱存在差異,您可能還需要對其進行更正。

我一般,我建議你從MySQL做兩個轉儲。一個應該是一個只有模式的轉儲,一個應該是隻有數據的轉儲,都是「兼容」格式。然後,您應該編輯模式轉儲以更正MySQL-isms並將它們轉換爲PostgreSQL-isms或(在可能的情況下)SQL標準用法。一旦使用psql thedatabasename < schema-edited-for-pg.sql修復了架構併成功加載到PostgreSQL中,您可以加載數據轉儲。

我還建議將數據轉儲包裝在BEGIN;END;語句中,以便它全部成功或全部失敗。這樣可以節省您不必重複刪除和重新創建數據庫和模式的麻煩,無論何時您在轉儲過程中遇到錯誤,都必須編輯轉儲以修復它。

+0

感謝您的提示。 –

+0

這裏丟失了好的提示。我希望我能給這個不止一個贊成票。 –