我正在考慮從MySQL切換到PostgreSQL。從MySQL切換到PostgreSQL - 提示,技巧和陷阱?
你使用PostgreSQL的技巧,竅門和陷阱是什麼?
MySQLer應該注意什麼?
參見:How different is PostgreSQL to MySQL?
參見:Migrate from MySQL to PostgreSQL
注 - 我不認爲這是一個重複。尤其是答案的類型是相當不同影響,這裏的反應有更多的實現細節,這正是我一直在尋找
我正在考慮從MySQL切換到PostgreSQL。從MySQL切換到PostgreSQL - 提示,技巧和陷阱?
你使用PostgreSQL的技巧,竅門和陷阱是什麼?
MySQLer應該注意什麼?
參見:How different is PostgreSQL to MySQL?
參見:Migrate from MySQL to PostgreSQL
注 - 我不認爲這是一個重複。尤其是答案的類型是相當不同影響,這裏的反應有更多的實現細節,這正是我一直在尋找
剛剛經歷過這個自己,我還是...
INSERT IGNORE
REPLACE
LOAD DATA INFILE
(COPY
接近,但不夠緊密)autoincrement
到SERIAL
INNER JOIN
沒有ON
條款不能發生,使用CROSS JOIN
或類似COUNT(*)
可以瘋狂慢interval
與Postgres的interval
(時間間隔)AS
CALL proc();
;重寫proc()
作爲函數並且SELECT proc();
。+1:Auto_increment串行?不喜歡序列? – 2010-07-26 19:46:50
@OMG小馬:在現代的PG版本中,您不必爲自動ID使用明確的序列。串行類型和bigserial類型隱藏了它的全部語義,但是它仍然是一個序列和所有的權力。他們創建一個自動命名序列並將該列的默認值設置爲nextval。 – rfusca 2010-07-26 22:06:12
你可以嘗試PostgreSQL gotchas包含最常見的問題。一般來說,PostgreSQL文檔也非常好,所以也要保存在你的枕頭下。
另外,在pgsql維基上的Converting from MySQL to PostgreSQL。 --transaction隔離= SERIALIZABLE --sql模式= ANSI
確保你不使用MyISAM表:
之前轉換,通過啓動服務器設置你的MySQL對ANSI-嚴格。
MySQL允許大量的轉換,它不應該; PG將需要演員。
您的存儲過程,函數和觸發器將不得不重寫。 pg爲您提供了這些語言的選擇,但您必須安裝語言;它不像MySQL那樣友好。
pg將只允許在一個選擇列表中的一個組中的列或聚合;如果你這樣做,MySQL將通過選擇組中的第一個值來作弊。
MySQL的增加一堆擴展:在不等於運算符可以是!=
如C,它允許「& &」作爲「與」的同義詞,「||」 for'or'等。特別是,pg使用'||'意味着字符串連接。
基本上,pg是非常嚴格的ANSI,MySQL不是。我強烈建議在轉換爲pg之前儘可能嚴格遵守ANSI標準,然後在運行應用程序時檢查是否有任何警告。
這將是一個艱鉅的任務,你就必須測試整個代碼庫 - 每一個查詢,隨時隨地,爲
操作上,您將需要查看:
你一定要做的主要量的性能測試,然後再考慮這樣的舉措。
這些成本使得移動到不同的數據庫對於大多數平凡的應用過於昂貴。考慮收益非常小心禁止做上述所有的廣闊,成本。
,如果你花不到三個月的時間,在一個平凡的應用程序,在此期間,你將無法繼續正常開發我會感到很驚訝。
,我發現這個腳本,將連接到您的MySQL數據庫和PostgreSQL數據庫和剛剛轉會的內容。它對我來說就像一個魅力。
https://github.com/philipsoutham/py-mysql2pgsql
任何文件夾中安裝了
$ pip install py-mysql2pgsql
運行
$ py-mysql2pgsql
,它會創建一個模板設置文件你(mysql2pgsql.yml),您可以編輯和在輸入您的數據庫的詳細信息。
我必須安裝argpars e爲它工作。
$ pip install argparse
當你的數據庫的細節填寫,只是在同一個文件夾的設置文件,再威猛
$ py-mysql2pgsql
運行它,你就完成了。它沒有在屏幕上打印任何內容,但之後我的數據庫被完全複製。
除了移動數據庫結構,在那裏你不能避免手動調整的...
傳輸數據的最可靠的方法(表由表,提供的結構相同):
mysql --default-character-set=utf8 -e "SELECT * FROM mytable" > mytable.txt
psql
\copy mytable from '/path/to/mytable.txt' WITH NULL AS 'NULL';
最近一直在嘗試使用其他方法(例如mysqldump有很多選項+ sed等),但沒有任何效果如此好。
此方法還可以有一定的靈活性,當結構沿途改變 - 只是寫一個合適的選擇。
請注意:這實際上並不涉及有關Oracle和Sun的消息。我有一個Rails應用程序,需要多個數據庫並查看使用PostgreSQL模式。 – 2009-04-21 11:19:49
請參閱:http://stackoverflow.com/questions/724867/how-different-is-postgresql-to-mysql – vartec 2009-04-21 11:30:14