程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 將你的網站從MySQL改為PostgreSQL

將你的網站從MySQL改為PostgreSQL

編輯:關於MYSQL數據庫

我的站點最初是采用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  };
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved