标题: PHP教程之利用PostgreSQL数据库做PHP开辟 [打印本页] 作者: 海妖 时间: 2015-2-3 23:56 标题: PHP教程之利用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 加点空间。
去谷歌狂搜材料,只找到个 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自己的特征,渐渐去研讨。