|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
终于理解了数据库的概念,而且让你兴奋不已的是你终于可以通过PHP来连接数据库了,这期间你是怎么学会的,我们不去考证了,但是事实证明,你已经可以了。
这个教程分为两局部,第一局部讲述了我停止这类转换的念头,并一步步地注释了若何将已存在有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帐号。这使得不需求你输出用户名和口令,Postgres就可以主动判别你的身份。你的Web主机或许不是采取的这类体例,在这类情形下,你需求为psql法式带入参数:psql -d databasename -U username -W。-d用来指定命据库,-U指定用户名,而-W请求psql提醒你输出一个口令。
当你胜利地运转了psql今后,将每一个CREATE TABLE查询独自地粘贴到psql中并按回车键。假如在你的SQL语句中有毛病,psql会给出响应提醒。经由过程一一地到场每个表,你会失掉每个表的调试信息,如许做起来相当复杂。
假如,在你输出了表的界说以后,你发明漏掉了一两个字段,有两种办法能处理这个成绩。你可使用ALTER TABLE号令,或是利用DROP TABLE删除这张表,然后从头生成。假如你利用第二种办法,你会看到一个正告以验证你是否是真的想要删除表。
要利用DROP TABLE号令,只需求输出DROP TABLE practicetable;。这会删除咱们方才界说的表。然而当你对这个表从头停止界说时,你会发明一个毛病。这是由于在删除一个表时其实不响应地删除这个表中SERIAL类型字段的序列。这些遗留上去的序列会在你重建表时引发毛病。要处理这个成绩,你必需在删除表之前利用DROP SEQUENCE sequencename;删除响应的序列。并且有件很厌恶的事,那就是序列名其实不就是SERIAL列的名字。当你界说一个SERIAL类型的字段时,Postgres会主动生成如许的序列名:tablename_colname_seq。在如今的这类情形下,DROP SEQUENCE 语句将会是如许的:DROP SEQUENCE practicetable_someID_seq;。如今你就能够删除这张表偏重重生成它了。
在添加完这些表以后,你可以输出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的伴侣教给我一个好办法。上面就是他所讲的办法:
利用telnet如许的终端法式毗连到你的主机。然后启动psql法式。起首,肯定表中ID的最大值。这可以用SELECT fieldname FROM tablename WHERE fieldname=MAX(fieldname);。然后利用DROP SEQUENCE table_colname_seq;删除有成绩的序列,这儿table是表名,而colname是SERIAL字段的列名。然后利用CREATE SEQUENCE table_colname_seq START 61;重建序列,固然这儿的61应依据你的实践情形停止修正。
装置一个图形界面的东西
当我胜利地将数据导入到Postgres后,我还需求让我的不懂Unix的同伴可以操作数据库中的数据。现在的MySQL我是利用的phpMyAdmin,这是一个很好用的东西,它可以在线的显示和编纂数据库。侥幸的是,已有了“Postgres版本”的phpMyAdmin,那就是phpPgAdmin。
phpPgAdmin的装置十分复杂。起首,从phpPgAdmin网站下载最新的版本,然后将其放到你的Web主机上的你所能会见的中央。利用telnet如许的东西上岸到主机。到phpPgAdmin.tar.gz文件地点的目次,输出tar -xzvf phpPgAdmin.tar.gz对法式停止解压(这里只是举个例子,你的文件名能够纷歧样)。上面一件事就是将解压生成的新的子目次移到适合的中央,并浏览README文件。
最初,用你的Web主机上的文本编纂器翻开config.inc.php。这个文件中包括了对phpPgAdmin的设置装备摆设。将这个文件设置装备摆设好你就能够经由过程阅读器利用PhpPgAdmin了,它会提醒你输出用户名并登录,经由过程这个法式你办理你的数据库将变得十分复杂。
在2001年六月,我将我的站点的后端数据库从MySQL改成PostgreSQL。这仅仅花了我一天的工夫。从那时起,Postgres一向任务得很正常,这证实我作出了准确的选择。
在这篇文章的上半局部,咱们解说了若何将数据从MySQL转换到Postgres。咱们还申明了我改用Postgres的来由。而鄙人半局部,咱们将指点你完成另外一半的转换任务并解说假如将已编制好的用于MySQL的PHP代码改用于Postgres。
筹办
在你做这项任务之前,你需求一些筹办任务。你的编程技能和网站的庞杂性将对法式的转换影响很大。为了避免在任务中产生毛病,在你的Web办事器上为你的站点作一份备份一定是需要的。我事先的处理办法是设置了一个指定的子域来测试我正在修正的代码。由于站点会依据一个设置装备摆设文件中的一些根基设置装备摆设主动处置URL,所以这件任务很复杂。你或许不克不及如许做,然而不论如何,你都需求一个别的的空间来放置你正在修改的法式,这可所以一个子域、你的站点的一个子目次、另外一个Web主机也能够是一个当地的开辟机械。
注重:假如你在另外一台机械修正你的法式,你必需确保这个Web办事器的设置装备摆设和你正在利用的站点一样。假如你的Web主机只答应从当地毗连Postgres,你或许将不能不将你的Postgres数据拷贝到开辟机械上。要失掉更多有关拷贝一个Postgres数据库的信息,可以参看http://www.postgresql.org/上的pg_dump和pg_restore。
做好了拷贝而且经由测试它可以正常任务以后,你可以着手对法式停止剖解了。
PHP手术:代码剖解
若何你之前没有一个中间的设置装备摆设文件,那末起首创立它。这将加重咱们的良多任务量,并且也使得咱们的修改可以即时对全部站点产生感化。这个设置装备摆设文件也该是不答应其它人经由过程网站会见的,不然这将是一个平安隐患。PHP的默许包括目次是/usr/local/lib/php/。你需求在你的Web主机上创立如许一个目次其实不答应经由过程网站会见。你还得确保这关于利用统一Web主机的其别人也没法读取这个目次。假如你的站点和我的一样,包括了一个尺度的头文件,你可以将你的Postgres设置文件放在那儿,这个设置装备摆设文件将会是如许的:!<?php
// /usr/local/lib/php/mysite/configfile.php
$hostname = "localhost";
$username = "username";
$database = "mydb";
$password = "mypasswd";
?>
<?php
//尺度的HTML头
include("mysite/configfile.php");
?>
<html>
<head>
<title>Bill's Kazoos</title>
...
</head>
<body>
...
有了如许一个后面如许的中间设置装备摆设文件,改动数据库体系将变得十分复杂。如今可以着手改法式了。
毗连和查询
PHP有关MySQL的函数和Postgres很类似,所以转换代码的任务并非太庞杂。现实上,你可以本人写一些函数来完成这类转换。在做这项任务之前,让咱们来看看二者的分歧:
要毗连到MySQL数据库需求用到两个号令:
$connection_id=mysql_connect($hostname, $username, $password);
mysql_select_db($database, $connection_id);
假如你利用一个耐久的毗连:
$connection_id=mysql_pconnect($hostname, $username, $password);
mysql_select_db($database, $connection_id);
但是,PHP毗连Postgres的函数只需求一个字符串参数,与MySQL函数分歧,这是一个复合的字符串参数。Postgres函数也需求你指定利用的数据库。上面是一个示例:
$connection_id=pg_connect("host=$hostname dbname=$database user=$username
password=$password");
一个耐久的毗连履行一样的任务,只是需求挪用pg_pconnect()函数。
PHP的MySQL和Postgres的查询函数一样有点分歧。MySQL的查询函数是$result_data = mysql_query("query goes here",$connection_id);,而Postgres的查询函数是如许的:$result_data = pg_exec($connection_id, "query goes here")。
正如你所看到的,PHP对MySQL和Postgres和毗连和查询的撑持区分其实不大,然而函数参数的分歧仍是需求咱们渐渐处置。要进步速度,你可以写一些函数使得Postgres可使用和MySQL一样的函数来毗连。假如你有了包括如许一种函数的中间库,你可以将这些函数也放在那边。你也能够将它们放置在咱们后面所提到的设置装备摆设文件中,由于它会主动地被每一个页面包括。
//毗连到数据库
function postg_connect($hostname, $username, $password, $database)
{
return pg_connect("host=$hostname dbname=$database
user=$username password=$password");
}
//假如你仅仅利用一个数据库,你最好将这些变量放到你的设置装备摆设文件中
function postg_autoconnect()
{
global $hostname, $username $password $database;
return pg_connect("host=$hostname dbname=$database
user=$username password=$password");
}
//查询函数
function postg_query($query, $connection_id)
{
return pg_exec($connection_id, $query);
}
不论你是不是利用这类函数,代码转换的任务老是相当复杂的。Postgres几近可以撑持一切的之前在MySQL下利用的SQL查询,然而你能够仍是要收拾整顿一下你的查询。由于在分歧的中央数据模子和代码会有一些分歧,我在这里不想具体注释这个成绩。但是,对SQL的转换其实不坚苦。起首转换代码,然后看看有哪些查询没法在Postgres中正常履行。对MySQL言语指南和PostgreSQL用户导游中的相干成绩停止对照,你或许不克不及在Postgres中找到一切与MySQL一律的功效,然而Postgres撑持一切的通用的功效。
如今你已把毗连和查询的代码改好了,上面的成绩能够要略微庞杂一点。PHP中MySQL和Postgres对了局集处置的分歧能够需求你对代码作更多的变化。
让咱们来看看对了局的处置
PHP的Postgres对了局的处置其实不完整和MySQL逐一对应;它们有一些巨大的分歧。这些巨大的不同能够只需求对代码作巨大的修改,然而也多是一个挺庞杂的成绩。
起首,让咱们看看MySQL和Postgres有哪些类似的中央。上面这个列表引见了通俗的MySQL了局处置函数和它们绝对应的Postgres函数:
MySQL
mysql_num_rows($result) 前往了局集的行数,这仅对SELECT语句无效
mysql_affected_rows($result) 前往在一个INSERT、UPDATE或DELETE查询中遭到影响的行数
mysql_fetch_object($result) 获得一行的数据并将其作为一个对象前往。字段名对应于类的属性名。(即$field1 = $var->field1;)这个函数保留了一个外部变量以包管每次挪用时可以前往下一行。
mysql_fetch_row($result) 这个函数以一个数组的模式前往了局集的一行。这个值可以经由过程一个从0入手下手的数组值取得。(即$field1 = $var[0];)。一样,这个函数保留了一个外部的计数器以包管每次挪用时可以前往下一行。
mysql_fetch_array($result) 这个函数和别的两个fetch函数根基不异,只是它以一个结合数组的模式前往一个行($field1 = $var["field1"];)。
Postgres
pg_numrows($result) 与对应的mysql_num_rows($result)完整一样
pg_cmdtuples($result) 与对应的mysql_affected_rows($result)完整一样
pg_fetch_object($result, $row) 取得了局集中的指定行。必需利用$row参数,并且没有一个外部的计数器。除此以外,它与mysql_fetch_object($result)完整不异。
pg_fetch_row($result, $row) 以一个数组的模式前往了局集中的指定行。一样必需利用$row参数,并且没有一个外部的计数器。
pg_fetch_array($result, $row) 与对应的mysql_fetch_array($result)根基一样,只是需求指定行,而且短少一个外部的计数器。
有关这些函数的更具体的信息,请参看PHP.Net上的PHP文档。
PHP对MySQL和Postgres撑持的最实质的分歧在于对了局集的浏览。MySQL主动决意获得哪一行,而Postgres必需指定要浏览哪一行。上面是一些例子,你也能够会碰到这些成绩,关于它们有两个处理计划。
//第一个通俗的例子:
$rslt=mysql_query("SELECT * FROM blah", $connection_id);
while($value=mysql_fetch_array($rslt))
{
//完成数据处置任务
}
//关于Postgres,如许的代码没法履行,由于他们需求指定行号
//代码将作以下修改(假如你没有利用后面会商的函数):
$rslt=pg_exec($connection_id, "SELECT * from blah");
$limit=pg_numrows($rslt);
for($rownum=0;$rownum<$limit;$rownum++)
{
$value=pg_fetch_array($rslt, $rownum);
//完成处置任务
}
在下面的例子中,你可以注重到Postgres的代码要略微长一点,这是由于你必需指定行号。但是,假如你利用了你编写的本人的计数函数,成绩就变得很复杂了。这儿是一个添加了如许一个函数的有效的文件。请注重在postg_query()中利用了三个全局变量。
// /usr/local/lib/php/mysite/configfile.php
$hostname = "localhost";
$username = "username";
$database = "mydb";
$password = "mypasswd";
//外部计数变量
$fetch_array_counter=0;
$fetch_object_counter=0;
$fetch_row_counter=0;
//处置毗连到PostgreSQL数据库的函数
function postg_connect($hostname, $username, $password, $database)
{
return pg_connect(host=$hostname, dbname=$database user=$username,
password=$password");
}
//不需求任何参数的毗连
function postg_autoconnect()
{
global $hostname, $username, $password, $database;
return pg_connect(host=$hostname, dbname=$database user=$username,
password=$password");
}
//查询函数
function postg_query($query, $connection_id)
{
//将全局变量设置为0
global $fetch_array_counter, $fetch_row_counter, $fetch_object_counter;
$fetch_array_counter=$fetch_row_counter=$fetch_object_counter=0;
return pg_exec($connection_id, $query);
}
//pg_fetch_array()置换
function postg_fetch_array($rslt)
{
global $fetch_array_counter;
$fetch_array_counter++;
//计数器加一
return pg_fetch_array($rslt, $fetch_array_counter);
}
//pg_fetch_row()置换
function postg_fetch_row($rslt)
{
global $fetch_row_counter;
$fetch_row_counter++;
//计数器加一
return pg_fetch_row($rslt, $fetch_row_counter);
}
//pg_fetch_object()置换
function postg_fetch_object($rslt)
{
global $fetch_object_counter;
$fetch_object_counter++;
//计数器加一
return pg_fetch_object($rslt, $fetch_object_counter);
}
?>
固然,假如你在统一个轮回中同时对两个了局集停止操作,下面的函数将没法正常地任务,由于它们只利用了一个外部的计数器。假如由于某种缘由,你需求同时浏览几个了局集,你将不能不利用传统的Postgres办法。
另外一个你能够碰到的成绩是在Postgres中没有与MySQL中mysql_insert_id()响应的函数,这个函数反应最初的INSERT查询的索引值。PHP文档常常会让读者误觉得pg_getlastoid()会完成这项任务,然而实践情形并非如许。短少这一样一个函数其实不一个没法超越的妨碍,你可以使用Postgres的SEQUENCE体系来完成如许的功效。
侥幸的是,要取得最初的ID是相当轻易的。你可以经由过程SQL取得Sequence信息,因而你可以用这个语句来完成mysql_insert_id()的功效:
function postg_insert_id($tablename, $fieldname)
{
global connection_id;
$result=pg_exec($connection_id, "SELECT last_value FROM ${tablename}_
${fieldname}_seq");
$seq_array=pg_fetch_row($result, 0);
return $seq_array[0];
}
由于Postgres利用了一个出格的定名体系来定名序列,我下面创立的这个函数需求指定表名和字段名。挪用这个函数,会前往你的表中的恣意SERIAL字段的最初一个序列值,即便在表中有不止一个如许的字段。
经由下面的这些处置后,你已可以在你的MySQL站点上胜利地运转PostgreSQL了。但是,这仅仅是第一步;假如你想懂得更多,持续看下去,你会看到一些有效的PostgreSQL的资本。
更进一步的资本
从PostgreSQL非FAQ文档站点你可以看到最后的和最主要的PostgreSQL资本。这个有价值的资本可以向你供应大批的书本、参考、手艺参考乃至于详细的任务。它一样会触及将后端数据库从MySQL 改成Postgres,另外关于利用PostgreSQL的其它成绩它也能够给你匡助。
另外一个有价值的PostgreSQL供应的资本是PostgreSQL交互文档。个中触及到利用PostgreSQL的良多成绩。
Xach Beane,由于其在The GIMP(一种图形处置软件)上的任务而有名,他也编写了关于将MySQL dump转换为Postgres dump的书写一个剧本。他的法式可以更加周全地处置这些成绩。不外,对这些成绩的处置并非非常完善的,因而你得当心地利用它。
Dobrica Pavlinusic也编写了一个法式以处置从MySQL到Postgres的转换。一样得提示你这个法式的处置依然不是非常完善的,因而仍是少不了象咱们下面所会商的手工的修正。
从这儿你可以找到一个十分完整的PostgreSQL&PHP指南。它会从装置入手下手引见PostgreSQL的利用。这个指南十分值得初学者浏览。
Bruce Momjohan编写了一本关于PostgreSQL的名为PostgreSQL: Introduction and Concepts的书,已由Addison Wesley出书。你乃至还可以在线浏览!
最初,OpenDocs也出书了适用PostgreSQL。这本书在2001年十月份出书,你可以从the OpenDocs Linuxports.com站点浏览。
将你的站点的后端数据库从MySQL改成PostgreSQL是一个明智的选择。转换任务一定会消耗工夫和精神,然而经由这些勉力后,你的站点可以具有一个更完善的数据库体系。就象我一样,你也会感觉这项任务是成心义的
说说这一个月左右的学习情况和心得吧!我个人认为,既然决定了去做一件事,那就要以认真的态度去对待!既然决定来学习了,那不管当初是抱着怎样的心态来到这个培训班的,都要让自己认真的投入到学习中。 |
|