首 页 教育新闻课件中心论文中心教学教案试题中心语文专题综合下载技术教程公务员  
设为首页
加入收藏
联系我们
您当前的位置:中国教育资源网 -> 技术教程 -> 网络相关 -> 服务器 -> Web服务器 -> 技术内容 退出登录 用户管理

将你的网站从MySQL改为PostgreSQL(上)Web服务器教程

论文作者:佚名  论文来源:不详  论文发布时间:2006-6-18 21:56:06  论文发布人:chjchjchj

减小字体 增大字体

              摘要:将你的网站从MySQL改为PostgreSQL(上)

原著:Nathan Matias 翻译:处处
    我的站点最初是采用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
};
    在一个Postgres的表定义中,字段名后面必须跟着字段类型。在上面的例子中我们给出了一些最普通的字段类型,你还可以在有关Postgres数据类型的文档中找到全部的字段类型的列表。对于不同的任务,Postgres在字段类型方面有多种选择,并可以存储各种类型的数据,从Internet地址到货币信息到几何对象的定义。这儿简要地介绍最常用的几种数据类型。
    SERIAL类型的字段和MySQL中的自增唯一ID等价。当你在你的数据表中定义了一个SERIAL类型的列后,SERIAL的自增功能会被自动添加到数据库。当自增功能不能适应实际需求时,我们可以自定义唯一ID的逻辑。从MySQL向Postgres转输数据时,默认的功能已经足够了。
    和字面上的意义一样VARCHAR类型是一个可变长度的文本字段。字段的长度由括号中的数值定义。例如,VARCHAR(5)定义了一个最多可包含5个字符的文本字段。
    SMALLINT、INT和BIGINT用来定义整型字段。SMALLINT字段可存储数值范围为-32768到+32767(实际的范围可能会稍微受到你的计算机类型的影响,上面的范围适用于最普通的系统)。INT字段可存储数值范围为-2147483648到+2147483647。而BIGIN字段类型可存储任何更大的整数,它没有范围的限制。
    REAL字符类型是一个包含十进制小数的实数。它可以精确到小数点后六位。DOUBLE PRECISION字段与此相类似,但是它可以精确到小数点后15位。
    BOOLEAN字段是真或假、1或0。这和MySQL中相似。
    TIMESTAMP字段和MySQL中的情况类型。每次记录更新时,timestamp被更新为当前的日期和时间。Postgres的时间字段还可以包含时区信息。有关Postgres时间数据的更复杂的应用,请参看PostgreSQL文档的日期和时间。

建立数据表
    当你使用SQL文件在Postgres中建立数据表时,请检查在每一个CREATE TABLE查询的最后是不是都以分号结束 - 这对于Postgres是不可省略的。使用telnet这样的工具连接到你的Web主机,然后用下面的方法建立数据表。
    首先,用一个文本编辑器打开你的表定义文件。然后登录到你的主机,并输入psql运行Postgres交互终端。默认的用户论证方式是使用你的telnet/FTP用户名作为你的Postgres帐号。这使得不需要你输入用户名和

[] [返回上一页] [打 印] [收 藏]  
 ∷相关技术评论  (评论内容只代表网友观点,与本站立场无关!) [查看发表评论...]
 
 中国教育资源网免费技术教程下载中心-站内广告 站内广告 中国教育资源网免费技术教程下载中心-站内广告 
 中国教育资源网站内搜索 站内搜索 中国教育资源网站内搜索 
 

   
 中国教育资源网免费技术教程下载中心-栏目导航 栏目导航 中国教育资源网免费技术教程下载中心-栏目导航 
· Windows 9XMEXP · Windows NT20002003
· LinuxBSD · 系统综合
· IISApache · 硬件技术
· Web服务器 · FTP服务器
· 邮件服务器 · 域名服务器
· Windows服务器 · 代理服务器
· 服务器综合
 
中国教育资源网免费技术教程下载中心-相关教程  相关技术 中国教育资源网免费技术教程下载中心-相关教程
· 最新技巧新鲜奉送 让
· asp+xml上传文件Web
· SendMail上手指南We
· 将你的网站从MySQL改
· ADSL上网用户防御黑
· ADSL上网用户防御黑
 中国教育资源网免费技术教程下载中心-本月热门教程 本月热门 中国教育资源网免费技术教程下载中心-本月热门教程 
 
 中国教育资源网免费技术教程下载中心-本日热门论文 本日热门 中国教育资源网免费技术教程下载中心-本日热门论文 
 
关于本站 - 网站帮助 - 免费课件 - 美容 - 绿色软件 - 软件下载 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 网站留言
浙ICP备06010405号 Email:cnkjz@163.com 技术支持:名流设计
版权所有 Copyright© 2002-2004 名流