我的站點最初是采用PHP驅動,由MySQL數據庫支持的方案,這在當時是一個明智的方案。在2001年夏天,我將我的數據庫換成了PostgreSQL(有時也簡稱為Postgres)。
這個教程分為兩部分,第一部分講述了我進行這種轉換的動機,並一步步地解釋了如何將已存在有MySQL的數據轉換到Postgres中。第二部分將會解釋如何根據新的數據庫系統對PHP進行相應的調整。
轉換的動機
我第一次了解Postgres是在PHPBuilder網站的一篇文章中。這篇文章將Postgres和MySQL進行了比較,當時我正在使用 MySQL。但是,當我閱讀了這篇文章後,我對Postgres著了迷 -- 但是當時我還沒有想到對我的網站進行重新的設計。
我繼續使用MySQL,因為我的主機提供商只能提供MySQL的支持,這是我所無法改變的。直到有一天,主機提供商的主機崩潰了。我立即換了一個主機提供商,與原來的那個相比,新的主機提供商有很多不同,他們在安全性和穩定性方面對我作出了更多的承諾。新公司試圖說服我使用Postgres,因為 Postgres要比MySQL來得更穩定,但是我當時沒有接受這個建議,因為我的網站已經根據MySQL完成了全部的編碼工作。他們只好專門為我的站點安裝了MySQL。於是問題開始了。
我的第一個工作是將舊服務器上的MySQL的數據拷貝到新的主機上。首先,我將已有的數據dump到一個SQL文件中,然後在新的主機上導入這個SQL文件。在處理這個數千行的文件時,MySQL迅速地崩潰了。重啟MySQL後,其中大概只有一半數據成功地導入了,而且MySQL只能間歇性地工作。最後,他們不得不刪除了已經導入的信息讓我再試一次。MySQL再次崩潰。這種情況重復了好幾次,直到最終我決定將我的SQL文件分割成幾塊。我不得不又試了幾次,最後終於將絕大多數的數據都成功地導入到新的MySQL服務器中。一切都好了,我總算松了一口氣。
在下面的幾個月中,MySQL幾乎每兩周都要崩潰一次,其中最慘痛的一次是在2001年6月底。這一次,存儲在MySQL中的數據完全被毀壞了。我有一個 SQL的備份文件,但是因為上次向MySQL中導入大量數據的痛苦的經歷,這一次我再也不想通過這個備份恢復數據了。這時,公司再次建議我對我的網站進行轉向,使用Postgres。由於MySQL的失敗,最終我接受了這個建議。
將數據從MySQL轉移到Postgres中
將數據從MySQL轉移到Postgres是一個不大的挑戰,因為Postgres比MySQL支持了更多的SQL的標准格式,在POstgres中直接使用SQL的dump結果是不可能的。但是,SQL語法相當相似,因此對於我來說,這並沒有花費太多的時間。
對MySQL的Dump結果進行轉換
首先,要求你的主機提供商為你的帳號建立一個數據庫。和MySQL數據庫一樣,Postgres的數據庫也由一系列包含實際數據的數據表組成。然後,使用mysqldump命令為你的MySQL數據庫做一個dump文件。
MySQLdump -u username -p databasename > sqldump.txt
使用FTP將整個dump文件下載下來。現在在你的計算機上有了這個SQL文件,你可以將其轉換成Postgres可以導入的文件。
首先,從dump文件中剪切所有的MySQL的CREATE TABLE查詢,並將其粘貼到一個單獨的文本文件中。下一步是使用Postgres可以理解的語言重新對數據表進行定義。
Postgres建立表的SQL和MySQL非常類似,但不完全一樣。下面是一個例子:
CREATE TABLE practicetable { someID SERIAL, time TIMESTAMP DEFAULT now(), name VARCHAR(50), address VARCHAR(50), city VARCHAR(50), state VARCHAR(2), country VARCHAR(3) DEFAULT 'USA', postlcode VARCHAR(15), age smallint, lattitude real, longitude real, somebool boolean, message textitem };