分享
 
 
 

使用PostgreSQL数据库做PHP开发

王朝php·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

使用PostgreSQL数据库做PHP开发

说明:下面内容更多是讲怎么安装环境的,实际开发内容几乎没有,你可以考虑是否阅读本文。

PostgreSQL数据库应该算是数据库界的启明星,其中一些功能甚至超过了Oracle等商业数据库,在开源世界来讲,可以说是非常不错的,甚至MySQL都跟它差很远。它支持包括JDBC、ODBC、DBI等等数据库链接方式,基本上能够目前所有流行的编程语言进行交互,可以说是适合任何编程开发者。

官方的介绍内容也许更能说明问题:http://www.pgsqldb.org/pgsqldoc-8.0c/preface.html

---------------------------------------------------------------------------------------------------------------------------------------------

何为 PostgreSQL?

PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。 POSTGRES 领先的许多概念只是在非常迟的时候才出现在商业数据库中。

PostgreSQL 是最初的伯克利的代码的一个开放源码的继承人。 它支持大部分 SQL:2003 标准并且提供了许多其他现代特性:

复杂查询

外键

触发器

视图

事务完整性

多版本并发控制

同样,PostgreSQL 可以用许多方法扩展,比如, 通过增加新的:

数据类型

函数

操作符

聚集函数

索引方法

过程语言

并且,因为许可证的灵活,任何人都可以以任何目的免费使用,修改,和分发 PostgreSQL, 不管是私用,商用,还是学术研究使用。

----------------------------------------------------------------------------------------------------------------------------------------------

今天想尝试一下PHP使用PostgreSQL做开发的感觉,于是就赶紧装一个吧。

一开始考虑是在Windows安装最新的8.0.3版本,但是想想,可能实际开发平台更多的是在Unix/Linux下,于是就准备在FreeBSD下做开发,刚好昨天把FreeBSD5.4升级了,赶紧ports一个回来。

cd /usr/ports/database/postgresql80-server

cat Makefile

一看,原来最新版是8.0.3,呵呵,正好呀,赶紧装。

make install

漫长等待的过程,它要去下载什么gmake,还要下载postgresql-8.0.3.tar.bz2等文件,老半天才装完。呵呵,很兴奋,启动一下看看:

/usr/local/etc/rc.d/postgresql.sh start (这个文件也许你的文件名不是这样)

晕,怎么出错了?反正死活就是启动不了,看来还得手工安装一下,先卸载掉吧:

cd /usr/ports/database/postgresql80-server

make deinstall

唉,把文件拷走吧:

cd /usr/ports/distfiles

mv ./postgresql-8.0.3.tar.bz2 /usr/local/src

解压缩:

cd /usr/local/src

bunzip2 -d ./postgresql-8.0.3.tar.gz2

tar xvf ./postgresql-8.0.3.tar

解压缩成功:

cd ./postgresql-8.0.3

配置文件,安装到我们的老目录里:

./configure --prefix=/usr/local/pgsql

gmake

等待的过程,到后来,晕,怎么又出错?

提示文件系统已经满了。。。-_-#

我的是虚拟机,空间分配不合理,看看能不能给 /usr 加点空间。

去google狂搜资料,只找到个 tunefs 的命令能解决这个问题,看了半天也没明白,链接:

http://www.freebsd.org.cn/snap/doc/zh_CN.GB2312/books/handbook/configtuning-disk.html

想想还是算了,装到其他分区不就完了,看看空间情况:

%df

Filesystem 1K-blocks Used Avail Capacity Mounted on

/dev/ad0s1a 507630 55060 411960 12% /

devfs 1 1 0 100% /dev

/dev/ad0s1e 507630 70072 396948 15% /tmp

/dev/ad0s1f 2025982 1960440 -96536 105% /usr

/dev/ad0s1d 507630 76340 390680 16% /var

那就装到 /var 下吧,呵呵:

./configure --prefix=/var/pgsql

gmake

gmake install

过程顺利,好,添加个运行pg的用户:

adduser

Username: postgres

Full name: PostgreSQL Server User

Uid (Leave empty for default):

Login group [postgres]:

Login group is postgres. Invite postgres into other groups? []:

Login class [default]:

Shell (sh csh tcsh bash nologin) [sh]: /bin/csh

Home directory [/home/postgres]:

Use password-based authentication? [yes]:

Use an empty password? (yes/no) [no]: yes

Lock out the account after creation? [no]:

Username : postgres

Password : <blank>

Full Name : PostgreSQL Server User

Uid : 1004

Class :

Groups : postgres

Home : /home/postgres

Shell : /bin/csh

Locked : no

建立存放数据库的目录:

mkdir /var/pgsql/data

把所有权给postgres用户:

chown postgres /var/pgsql/data

切换到用户postgres:

su - postgres

初始化数据库:

/var/pgsql/bin/initdb -D /var/pgsql/data

开始运行:

/var/pgsql/bin/postmaster -D /var/pgsql/data >logfile 2>&1 &

晕,怎么一堆错误!!!

postmaster does not know where to find the server configuration file.

You must specify the --config-file or -D invocation option or set the PGDATA environment variable.

没有指定配置文件,赶紧看看配置文件再哪里?

find / -name "postgresql.conf"

/var/pgsql/data/postgresql.conf

哦,原来初始化数据库的时候就建立了配置文件,赶紧写上:

./postmaster --config-file=/var/pgsql/data/postgresql.conf

晕,怎么又出现新的错误?

哦,原来没有配置postgresql.conf的内容,赶紧把重要的配置一下,配置过的内容如下:

#---------------------------------------------------------------------------

# FILE LOCATIONS

#---------------------------------------------------------------------------

# The default values of these variables are driven from the -D command line

# switch or PGDATA environment variable, represented here as ConfigDir.

# data_directory = 'ConfigDir' # use data in another directory

data_directory = '/var/pgsql/data'

# hba_file = 'ConfigDir/pg_hba.conf' # the host-based authentication file

hba_file = '/var/pgsql/data/pg_hba.conf'

# ident_file = 'ConfigDir/pg_ident.conf' # the IDENT configuration file

ident_file = '/var/pgsql/data/pg_ident.conf'

看出来了吧,就是指定了一个数据库文件目录,两个配置文件的路径。

再启动:

./postmaster --config-file=/var/pgsql/data/postgresql.conf

LOG: database system was shut down at 2005-07-15 01:20:24 CST

LOG: checkpoint record is at 0/A38D20

LOG: redo record is at 0/A38D20; undo record is at 0/0; shutdown TRUE

LOG: next transaction ID: 678; next OID: 17231

LOG: database system is ready

OK,成功。好,看看能不能从我哪儿访问,先访问下默认的5432端口:

telnet 192.168.0.215 5432

怎么回事,无法连接?赶紧Google一下,哦,原来是默认只是允许本地链接,要修改配置文件:

vi /var/pgsql/data/postgresql.conf

修改以下内容:

#---------------------------------------------------------------------------

# CONNECTIONS AND AUTHENTICATION

#---------------------------------------------------------------------------

# - Connection Settings -

#listen_addresses = 'localhost' # what IP interface(s) to listen on;

# defaults to localhost, '*' = any

listen_addresses = '*'

#port = 5432

看到没有,就是把监听地址默认的localhost改为*,就是允许所有。再启动后telnet,呵呵,黑乎乎屏幕出现,没有问题。

哈哈,现在终于能用PHP来连接了吧。

打开php里的pgsql扩展,输出phpinfo()看看能不能支持pgsql,一看,能了,赶紧写代码看看:

<?php

$link_str = "host=192.168.0.215 port=5432 dbname=test user=postgres password=postgres";

$link_id = pg_connect($link_str);

print_r($link_id);

?>

保存为pgsql.php,打开浏览器:http://localhost/pgsq.php,哈哈,等着出链接ID吧!

哦,怎么回事?出现错误:

Warning: pg_connect() [function.pg-connect]: Unable to connect to PostgreSQL server: FATAL: no pg_hba.conf entry for host "192.168.0.216", user "postgres", database "test" in E:\Web\www\Temp\pgsql\pg.php on line 3

仔细看,pg_hba.conf entry for host "192.168.0.216" ,哦,原来是这个配置文件里没有允许我这个IP地址的访问,真是安全哪!

看来这个pg_hba.conf里面也必须设置才行,赶紧打开:

vi /var/pgsql/data/pg_hba.conf

添加了一段IP地址,如下内容:

# TYPE DATABASE USER CIDR-ADDRESS METHOD

# "local" is for Unix domain socket connections only

local all all trust

# IPv4 local connections:

host all all 127.0.0.1/32 trust

host all all 192.168.0.216 trust

# IPv6 local connections:

host all all ::1/128 trust

看见没有,我添加了:

host all all 192.168.0.216 trust

如果你要允许一个段的IP,就可以添加成 192.168.0.1/24 什么的。

再启动postgresql,我浏览器再次连接,浏览器输出:

Resource id #1

^_^,成功了吧!

赶紧下个windows下的管理工具来,去:http://www.pgadmin.org/ 下载了一个 pgAdmin III回来,安装完后,启动,添加服务器,成功。用起来不错,跟MysqlCC有一拼,还支持中文。

基本到这里就没有什么了,呵呵,另外,说一个pgsql的特征,就是如果同一个用户在多个IP上登陆到服务器上,那么就只允许一个用户执行,操作,其他用户无法执行,否则出现错误,比如我在我的XP上使用pgAdmin登陆后,我又到服务器端去执行操作:

/var/pgsql/bin/createdb db1

createdb: database creation failed: ERROR: source database "template1" is being accessed by other users

看见没有,出错了吧。

从上面种种来看,pgsql真是安全哪,把很多安全问题都扼杀在摇篮,而且配置也很丰富,虽然我安装过程复杂了一点。其实多看看手册就明白的很了,只怪我不看手册。

晕,说了半天,没怎么说PHP怎么做开发,呵呵,搭环境比较重要吧,至于开发和pgsql本身的特性,慢慢去研究。

附加点好东西:

官方推荐的安装过程,但是实际中不好使:

-------------------------------------------------------------------------------------------

./configure

gmake

su

gmake install

adduser postgres

mkdir /usr/local/pgsql/data

chown postgres /usr/local/pgsql/data

su - postgres

/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data >logfile 2>&1 &

/usr/local/pgsql/bin/createdb test

/usr/local/pgsql/bin/psql test

------------------------------------------------------------------------------------------

PostgreSQL中文手册:http://www.pgsqldb.org/twiki/bin/view/PgSQL/PgDocList

PostgreSQL中文论坛:http://bbs.pgsqldb.com

PostgreSQL官方网站:http://www.postgresql.org

Author: heiyeluren

WriteTime: 2005-7-15 下午16:30

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有