将你的网站从MySQL改为PostgreSQL
2007-05-09 10:56:27 来源:WEB开发网在添加完这些表之后,你可以输入z对这些表进行复查。而输入q将会退出psql。现在剩下来的就是准备输入到Postgres中的数据了。
处理Dump文件
因为MySQL保留了绝大多数的SQL语言的标准,从一个SQL的dump文件中导出实际数据并不是太困难的。然而,在我们使用Postgres对这个文件进行处理前,我们还是需要作一些编辑工作。
对于数据记录,在MySQL和Postgres之间的主要区别是对引号的处理。在Postgres中,字符串变量(包含文本的变量)必须由两个单引号引出。而在MySQL中,你还可以使用双引号,但是幸运的是,在mysqldump程序中程序中使用的是单引号,这刚好与Postgres一致。然而, MySQL和Postgres还有一个地方不同,那就是对字符串中出现的引号的处理。在MySQL中使用"",而在Postgres中使用"。使用你的文本编辑器并通过替换功能将其中所有的""替换为"。有趣的是,Postgres和MySQL都使用''来表示单引号,这使得我们免去了一个麻烦。
导入到Postgres中
当你整理好SQL dump文件后,将这个文件上载到你的Web主机中,就如同你当初建表那样登录到主机,转到SQL dump文件存放的目录。启动psql,不过这次你必须使用另一个命令行参数:psql -f sqldump.txt,这儿的sqldump.txt就改为你的SQL dump文件的文件名。这个命令会将全部的SQL文件导入到适当的Postgres数据表中。在此之前,你也许还需要其它的一些命令行参数以使得psql 可以对你的身份进行验证。如果发生了错误,psql会告诉这是由什么引起的。找到文件中的这一部分,找到问题并手工解决它。我当初是没有遇到任何问题,我差不多准备结束工作了。但是,很快我注意到另一个问题。
在我开始使用我的新的Postgres驱动的站点时,我偶然地发现MySQL和Postgres之间另一个不兼容的地方。SERIAL类型的自增字段所使用的Postgres的序列,它从1开始,并在每次有一个SERIAL类型字段的记录插入时加一。然而,在我导入MySQL的dump文件时,这个 dump文件中的SQL将这个值定义为整型主键。我当时的情况是,我有一个到唯一主键已经到了60,而序列仍然是1。于是我的每一个插入命令都没法成功,因为根据序列产生的不是唯一ID。我当时用了一个很笨的方法解决这个问题,那就是运行了60次INSERT语句以将序列调整为适当的值,但是后来有一个熟悉Postgres的朋友教给我一个好方法。下面就是他所讲的方法:
更多精彩
赞助商链接