將MySQL數(shù)據(jù)庫(kù)移植為PostgreSQL
更新時(shí)間:2009年07月26日 22:10:21 作者:
PostgreSQL 作為功能最強(qiáng)勁的開(kāi)源 OO 數(shù)據(jù)庫(kù),仿佛一直不為國(guó)內(nèi)用戶所熟識(shí)。而我個(gè)人也僅是因?yàn)楣ぷ鞯木壒式佑|到這款超經(jīng)典的數(shù)據(jù)庫(kù),并深為之折服。
在北美,人們對(duì)于 PostgreSQL 的熱情不斷升溫。隨著 PostgreSQL 的發(fā)展, PostgreSQL 8.x 已經(jīng)從技術(shù)上超越 MySQL 5.x ,而市場(chǎng)的超越相信只是時(shí)間問(wèn)題。而最終,用戶也許有機(jī)會(huì)享受到可媲美 Oracle 的開(kāi)源數(shù)據(jù)庫(kù)也未嘗沒(méi)有可能。
我供職的互聯(lián)網(wǎng)公司,服務(wù)約 50 萬(wàn)商務(wù)用戶,經(jīng)過(guò)多次的升級(jí)移植,目前公司已經(jīng)全部將后臺(tái)數(shù)據(jù)庫(kù)從 MySQL 移植到 PostgreSQL ,而個(gè)人完成了其中一半的數(shù)據(jù)庫(kù)移植工作,所以對(duì)數(shù)據(jù)庫(kù)從 MySQL 移植到 PostgreSQL 積累了一些經(jīng)驗(yàn)。在此整理成文,希望能對(duì)大家使用 PostgreSQL 有一些啟發(fā)。
1) 準(zhǔn)備: 使用 MySQL 數(shù)據(jù)備份工具對(duì)數(shù)據(jù)庫(kù)進(jìn)行全備份:
mysqldump -h [hostname] -u [username] -p [password] --extended-insert=false [dbname] > mysql-db.sql
注意 disable extended-insert , PostgreSQL 不支持 MySQL 的 extended-insert
2) 轉(zhuǎn)化: 將 mysql-db.sql 轉(zhuǎn)為 PostgreSQL 可以導(dǎo)入的 SQL Script.
MySQL 和 PostgreSQL 在 SQL 語(yǔ)義上存在一定差異,比如 MySQL 不支持 sequence ,觸發(fā)器等功能,但為此又提供了一些自有的語(yǔ)法規(guī)則,而對(duì)比一些系統(tǒng)函數(shù), MySQL 和 PostgreSQL 又存在比較大的差別。為此,我編寫了一段語(yǔ)義分析和轉(zhuǎn)化的程序 mysql2psql
>mysql2psql mysql-db.sql postgres-db.sql
3) 導(dǎo)入: 使用 PostgreSQL 提供的 pgAdmin 將數(shù)據(jù)文件導(dǎo)入數(shù)據(jù)庫(kù)。
4) SQL 語(yǔ)句的修改: 在實(shí)際的應(yīng)用中,前端的系統(tǒng)往往會(huì)嵌入一些具有數(shù)據(jù)庫(kù)特性的 SQL 語(yǔ)句,而隨著后臺(tái)數(shù)據(jù)庫(kù)的改變,前端的系統(tǒng)程序也同樣需要做出相應(yīng)的修改。
MySQL 和 PostgreSQL 最常見(jiàn)的不同之處包括:Group by,Join的使用差異,系統(tǒng)函數(shù)的命名和調(diào)用的差異等等。
我供職的互聯(lián)網(wǎng)公司,服務(wù)約 50 萬(wàn)商務(wù)用戶,經(jīng)過(guò)多次的升級(jí)移植,目前公司已經(jīng)全部將后臺(tái)數(shù)據(jù)庫(kù)從 MySQL 移植到 PostgreSQL ,而個(gè)人完成了其中一半的數(shù)據(jù)庫(kù)移植工作,所以對(duì)數(shù)據(jù)庫(kù)從 MySQL 移植到 PostgreSQL 積累了一些經(jīng)驗(yàn)。在此整理成文,希望能對(duì)大家使用 PostgreSQL 有一些啟發(fā)。
1) 準(zhǔn)備: 使用 MySQL 數(shù)據(jù)備份工具對(duì)數(shù)據(jù)庫(kù)進(jìn)行全備份:
mysqldump -h [hostname] -u [username] -p [password] --extended-insert=false [dbname] > mysql-db.sql
注意 disable extended-insert , PostgreSQL 不支持 MySQL 的 extended-insert
2) 轉(zhuǎn)化: 將 mysql-db.sql 轉(zhuǎn)為 PostgreSQL 可以導(dǎo)入的 SQL Script.
MySQL 和 PostgreSQL 在 SQL 語(yǔ)義上存在一定差異,比如 MySQL 不支持 sequence ,觸發(fā)器等功能,但為此又提供了一些自有的語(yǔ)法規(guī)則,而對(duì)比一些系統(tǒng)函數(shù), MySQL 和 PostgreSQL 又存在比較大的差別。為此,我編寫了一段語(yǔ)義分析和轉(zhuǎn)化的程序 mysql2psql
>mysql2psql mysql-db.sql postgres-db.sql
3) 導(dǎo)入: 使用 PostgreSQL 提供的 pgAdmin 將數(shù)據(jù)文件導(dǎo)入數(shù)據(jù)庫(kù)。
4) SQL 語(yǔ)句的修改: 在實(shí)際的應(yīng)用中,前端的系統(tǒng)往往會(huì)嵌入一些具有數(shù)據(jù)庫(kù)特性的 SQL 語(yǔ)句,而隨著后臺(tái)數(shù)據(jù)庫(kù)的改變,前端的系統(tǒng)程序也同樣需要做出相應(yīng)的修改。
MySQL 和 PostgreSQL 最常見(jiàn)的不同之處包括:Group by,Join的使用差異,系統(tǒng)函數(shù)的命名和調(diào)用的差異等等。
相關(guān)文章
mssql2008 自定義表類型實(shí)現(xiàn)(批量插入或者修改)
在做大型網(wǎng)站或者系統(tǒng)的時(shí)候,經(jīng)常會(huì)遇到個(gè)問(wèn)題就是批量插入或者修改數(shù)據(jù)庫(kù);今天這邊不講SqlBulkCopy,只簡(jiǎn)單講sql自定義表類型,感興趣的朋友可以了解下哦,希望本文對(duì)你有所幫助2013-01-01
Mysql通過(guò)Adjacency List(鄰接表)存儲(chǔ)樹(shù)形結(jié)構(gòu)
本片介紹MYSQL存儲(chǔ)樹(shù)形結(jié)構(gòu)的一種方法,通過(guò)Adjacency List來(lái)實(shí)現(xiàn),一起來(lái)學(xué)習(xí)下。2017-12-12

