以下将说明使用Apache
PHP3Postgre
SQL作为基于Web的
数据库平台的安装和配置方法。
6 g) B4 `4 d( a2 j3 v& D) G
关于Apache、PHP3和PostgreSQL的更多内容可以从
软件的附带文档、
Linux的HOWTO文件
- D' e, x. l0 A3 K+ A: N. D以及以下站点处找到:
$ E4 c% [( @2 j
Apache: http://www.apache.org
) @, Q/ Q. c! Q; k( t8 gPHP3: http://www.php.net
. i- Y$ q, U2 s, u# L9 L2 z' m6 }PostgreSQL: http://www.postgresql.org
0 R% v& w* h8 E( R! |4 W$ c5 l# X4 Y# X; O" J% W2 D2 p
1. PostgreSQL的安装和设置
5 j7 A: U5 _" _
1.1 获得源
程序
: g: f- N4 z& o' D4 [) I; GPostgreSQL最新版本的源程序可以在http://www.postgresql.org找到。目前的最新版本
5 b) Z: T8 W7 b1 d是6.5.X。以下以6.4 版为例说明安装方法。
& n' ] K# i, F( H0 G; p# `3 y o% m+ `' Q* U& C) c
1.2 准备工作
# o2 \$ F8 d, V0 {9 E4 o/ y. S编译PostgreSQL需要3.75版以上的GNU make (用gmake -v检查版本号) ,2.7.2版以上的
; W0 z" t+ N7 B7 x2 ~" B" R* GGNU C(用gcc -v 检查版本号)以及bison和flex(通常这两种工具都已经安装了) 。
+ c6 P. T* ~9 N( l& P1 Z! G$ v- A" g
PostgreSQL的默认安装位置为/usr/local/pgsql/,
系统文件约需3-10M
空间。附带的
测试2 [9 k4 s: v$ P* Y
程序在运行时需要约20M空间,所以安装时应注意预留足够的空间,建议/usr/local/pgsql/
1 }7 o: u9 q% D: Y3 J+ m0 _+ x目录下保证有50M以上空间。另外展开和编译源程序约需30-60M空间。
0 |( e# l$ N( E4 n& d6 }$ z
对多用户的应用
环境,建议设置一个专用用户名,例如 postgres :
. K" z9 E z( _6 E1 B$ su 首先登录为root
/ h' X( ?6 t( w. P, Q) }% H
# /usr/sbin/adduser postgres
8 n7 W5 a6 R7 {0 d$ D
p; V0 O/ @& m5 t6 ~4 v1 y( n
另外PostgreSQL使用了
System V的
共享内存机制。FreeBSD默认状态不支持该机制。如使用
# r) N/ S$ k+ J" C中的内核的设置文件中无以下项目则需追加后重新编译内核:
" D. h) a+ d5 |& v" o- r
options SYSVSHM
$ ]- ]- C9 k! \/ F2 ?( Coptions SYSVSEM
; i: P, c' q0 O. ]options SYSVMSG
; D& x# U3 V+ ^( P" G7 e
0 m& W( q* M6 B/ _4 r建保存源程序的目录/usr/local/src/pgsql和安装目录/usr/local/pgsql:
0 D) U- G2 K0 r: B# e: D) s
#mkdir /usr/local/pgsql
$ M" A. U& d, k7 ~. L
#chown postgres:postgres /usr/local/pgsql
# j: @9 y6 u- G$ E) c: ?8 s% I. A7 z#mkdir /usr/local/src
$ |8 s2 W9 x2 `! t& r) O7 g- Y! [% w1 l$ h
#mkdir /usr/local/src/pgsql
3 E# E+ }5 ]' d5 d: @
#chown postgres:postgres /usr/local/src/pgsql
% B0 I. G) o- |; Q! @
* D6 Y1 d" R% N8 b& e1.3 编译
; [% X5 W' u: z9 z
以postgres用户登录, 解压缩源程序:
% i: }, e. Q* ]3 g w1 F8 p
# su postgres
7 U; _ a0 m6 y0 U( B! `) Q
$ tar -xzvf /tmp/postgresql-v6.4.tar.gz [假设
下载文件保存在/tmp目录下]
1 G: b/ T( R. x, \5 k- ~
完成后应生成一个postgresql-v6.4目录,下面开始编译:
( q: d+ N3 F0 ]) x6 G
$ cd /usr/local/src/pgsql/postgresql-v6.4/src
2 I' k9 z# O N5 V: J. p6 b4 v( c- o$ ./configure --with-mb=EUC_CN
) u) K2 c D1 B& [
其中,--with-mb=指定系统默认字符编码。除GB码(EUC_CN) 外,还可以指定为日语
5 R: y# Z @3 [5 |: L6 L8 |* B; J
(EUC_JP)、韩语(EUC_KR) 、
台湾(EUC_TW) 、
UNICODE、MULE_INTE
RNAL、LATIN1等。
! c" ]1 G* m& C/ J4 I
注意,如使用6.3.2版需用--with-template=... 指定
操作系统,具体内容见源程序附带的说明文件。
) E9 A, T2 z$ P' I; V5 k8 Q% m
configure如顺利完成,将生成GNUmakefile,Makefile.global和Makefile.port等文件。
+ _% T8 U" Q: f$ Q8 _- ^$ gmake all
: @; T- P7 n2 e3 w4 k' I! m. f( j在编译结束后将显示以下
信息:
) a; g* H3 \* ~All of PostgreSQL is successfully made. Ready to install.
! ]8 V/ V: e* H- ?: R5 F/ s安装:
) [4 d, f- y6 N" D7 q! `
$ gmake install
$ i! ?/ }9 S$ I/ X& F E正常完成后,PostgreSQl的执行文件和库文件等将被安装到/usr/local/pgsql目录下。
+ _% X! [" e1 \9 |- H9 Z' q& H0 S
安装附带文档:
7 K3 Z5 O- B4 R1 x- J3 V$ gmake install-man
. W% H Q2 H- N j4 k$ cd /usr/local/src/postgresql-v6.4/doc
: z7 ?) V' x! z' j* o$ make install
: b3 `, p7 v+ |1 y" r3 j
至此PostgreSQL的编译安装已经完成,下面开始初期设置。
$ p. J- C# _ `! w* t9 k" d1 Q: M0 u( b; u# G. C; r
1.4 初期设置
2 G ?9 ^8 M$ [1 {1 x% R8 `. J! {5 _* ^设置环境变量:
! r! P- h4 Z# ]: s' v如使用的
shell为bash, 则在.bashrc中添加以下命令:
# w' ^/ p8 l# |
PATH="$PATH":/usr/local/pgsql/bin
" U3 i( S0 X/ H4 d. ]
export POSTGRES_HOME=/usr/local/pgsql
7 q" Z3 s4 y% u2 N% x* x
export PGLIB=$POSTGRES_HOME/lib
! y$ E& `& U" F6 i+ c. E
export PGDATA=$POSTGRES_HOME/data
7 e2 C3 n9 H# C9 Gexport MANPATH="$MANPTH"

POSTGRES_HOME/man
/ p4 J8 K& ?, g8 n! vexport LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"
) ~$ N3 O: c: c- i% o然后执行 source "/.bashrc
: k% t/ V6 Y4 \/ S4 `
如使用的shell为csh/tcsh则在.cshrc中添加以下命令:
0 q- @: D3 \6 p. H* T! Q4 U% J" \! s
setenv PATH="$PATH":/usr/local/pgsql/bin
- s, `. M5 Y4 m7 w8 t% Q% ]8 zsetenv POSTGRES_HOME=/usr/local/pgsql
5 S6 G( u. p0 X6 k2 qsetenv PGLIB=$POSTGRES_HOME/lib
2 W+ d5 ~* G; i
setenv PGDATA=$POSTGRES_HOME/data
. _1 n& a9 x: ]8 B/ c! s0 ?
setenv MANPATH="$MANPTH"

POSTGRES_HOME/man
/ a$ g* N5 ?; H) Dsetenv LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"
$ v% O. i0 E+ u3 O# [
然后执行 source "/.cshrc
& S$ g7 ?1 C9 i& G5 G3 w/ w
以上环境变量是所有使用数据库的用户都需要设置的。
7 q f* g: _, g, w- l数据库目录的初始化:
0 Y* J% j& N- p$ initdb
2 t" r) ` ?' o" T' \) a# ~/ i+ a
可以使用的参数:
# c3 q/ y$ J! i( n8 I" I--pgdata=/pgsql/db 指定数据库目录,默认使用环境变量PGDATA指定的位置
5 }$ v( ?& M( c3 S--pgencoding=EUC_CN 指定数据库的字符编码,默认使用configure时指定的编码。
/ Y9 W! K: h' j: J% M需要注意的是执行initdb的用户将拥有所建数据库目录的
管理权。
& ~# l9 h1 l7 d7 E) O# L6 t使用以下命令启动PostgreSQL:
; O7 @' W$ \$ x; F: _$ postmaster -S
5 \4 E: M: m7 Z3 y运行测试程序:
) L" H" j$ B# W' e
$ cd test/regression
2 U1 X: \) \7 u2 j
$ gmake all runtest
) ~& P$ ^' x6 f如测试程序能正常运行则说明PostgreSQL能正常运行。
1 V/ b( ?5 Q+ s
为了让 PostgreSQL在系统启动时能自动启动,需作以下变更:
% V Q- Z) L/ ^! ~
首先以root登录
" v: A7 @$ K, x+ b$ su
. R' D0 J7 q8 y$ e# [Linux: 在/etc/rc.d/rc.local中追加以下内容:
! V- Z! j- m& }2 v0 t GPOSTGRESDIR=/usr/local/pgsql
- h* O2 x: X) G1 k2 Y, C, _- n3 o& H( [
if [ -x $POSTGRESDIR/bin/postmaster -a -d $POSTGRESDIR/data ];then
8 l' W* h5 R w$ T1 a3 H' e V
rm -f /tmp/s.PGSQL.5432
1 F w, n& \7 u" H
su - postgres -c "postmaster -S -i"
. [1 E# p7 X4 Eecho -n 'postmaster'
$ D: N' L S9 `# F9 \
[color=#FFFFFF']
3 X9 R3 r$ D' y( x& `# R$ G
3 U2 u# C0 S4 \ A: Z) }fi
( t p' N9 p% C' @0 j; s/ A6 X
FreeBSD: 在/usr/local/etc/rc.d中建立名为pgsql.sh的文件,内容为:
" F! A* S2 t+ G# G7 }4 d9 Z#! /bin/sh
1 M1 n# r# w% N9 j) ^
POSTGRESDIR=/usr/local/pgsql
5 Y+ }! q" d8 P! A1 Y8 v" n! i% U- T
if [ -x $POSTGRESDIR/bin/postmaster -a -d $POSTGRESDIR/data ];then
+ C2 |$ |& D3 b, g: g# j6 vrm -f /tmp/s.PGSQL.5432
; \3 C1 ^$ C# s2 n5 h+ [su - postgres -c "postmaster -S -i"
: p' i2 U" w5 \6 vecho -n 'postmaster'
3 Y7 U f( g8 X0 A
fi
( |. Y, F' v ?; e
修改pgsql.sh文件的权限:
! W; H+ E0 a* r. e; E' e9 J {# chmod 755 pgsql.sh
; M/ G5 k! A# t7 }' ]: i* ]现在PostgreSQL的安装和设定基本已经完成了,但是目前为止能使用数据库的用户只有postgres。
2 [0 a2 m2 J* R8 Y- V+ d, y! _. W- F
为使其他用户可以使用数据库,需要登录数据库用户和生成用户数据。
, S/ p0 `* ]2 ~! _; d. T# g例如通过Web
服务器Apache进行查询的用户,用户名为nobody:
* X( e+ Q; `! }7 K1 m, ]
% createuser nobody
) F6 M& m( m0 Y2 y. u I K4 l
Enter user's postgres ID or RETURN to use unix user ID: 1000 -%26gt;1000
$ P& M |) r' J- T7 ?3 U% W: s/ W
Is user "nobody" allowed to create dataase(y/n)n
& q/ d! b0 B3 o
Is user "nobody" allowed to add users?(y/n)n
3 p: v2 E2 D6 U/ Y0 O9 O; Ycreateuser: nobody was successfully added
: G# O" I) `+ E3 K' T7 i: F
删除用户可以使用命令destroyuser 用户名
- G9 c- H2 V2 p+ GPostgreSQL可以同时管理多个数据库(但数据库之间不能进行join等操作)。新建数据库:
/ p6 P- {: P; t* z
$ createdb 数据库名
1 I! w" Q+ Z9 q新建的数据库将被放在/usr/local/pgsql/data/base的同名目录下(环境变量PGDATA指定
( M5 F* M, p" ~4 L& z. C- g
路径的base目录下)。如省略数据库名参数,将自动以用户名作为数据库名。
. _" U4 Z* r, q0 z
例如 名为db1的数据库将被保存在/usr/local/pgsql/data/base/db1目录下。
& d T) K/ \7 ~- ]$ U" g9 S也可使用initlocation命令指定其他位置:
2 C/ _# w7 ]% i
$ initlocation /pgsql/data
+ M6 B" }! G2 e) h$ export PGDATA2=/pgsql/data
8 l: @" I( _/ m$ R% F. ]$ w) B
$ createdb -D PGDATA2 db2
9 J% c; D3 U8 B则数据库db2将被保存在/pgsql/data目录下。另外PostgreSQL 6.4版可以在建立数据库时
6 f" [- v( b2 g# i' I指定文字编码:
# \' B Q, h% E) S1 _6 Ocreatedb -E “字符编码” “字符编码” 参见
5 B4 V3 s0 U7 s9 T7 ?, l8 T1 N& pconfigure、initdb。
& X4 j; T6 l# {1 t8 r0 D/ }
删除数据库:destroydb 数据库名
3 T9 r) g D9 z. ~" ~. t! G
PostgreSQL最基本的数据库管理工具是pgsql. 基本使用方法:pgsql 数据库名
8 O4 H) y* h; \8 ]3 I1 @. @* X
$ k0 Z* E- G) E, r+ G8 P# W
1.5
安全设置:
: {( x% c; c: d' r; }- R& Y `PostgreSQL提供了基于主机的认证方式host based authentication(HBA) 、基于口令的
) o) `. ~; W" d! d7 g/ \. X; {, I用户身份认证和用户操作权限设置等安全机制。
1 p' \% R9 v- E* M* U2 {7 e8 |
" ]5 t: j( v/ _: z
1.5.1 HBA方式和基于口令的用户身份认证方式
) ^: m8 B$ W" T, |6 R4 n' B fHBA方式的设置文件为pg_hba.conf。其格式为:
# a3 l9 z' T6 f: O
host DBNAME IP_ADDRESS ADDRESS_MASK USRAUTH [AUTH_ARGUMENT]
5 y- {# U# d; k3 }: Z' H8 |host: 固定标志,不能修改
- j' l {; i. S! _' h6 M1 pDBNAME: 数据库名,all代表所有数据库
, E3 N1 E/ U( O2 I: \
IP_ADDRESS,ADDRESS_MASK:指定IP地址,也可指定子网,如192.168.10.0/255.255.255.0
& A% {$ r1 g1 p# w5 X: l6 m7 J
USERAUTH: 对用户的认证方式,包括ident(RFC1413) 、trust(不进行认证) 、reject
0 H0 p, J8 r% ^9 z' L) |1 F t
(拒绝符合条件的访问) 、password [passwd_file](根据flat file口令文件进行认证) 、
, u# q9 S. q4 o- e1 T' w
crypt(使用PostgreSQL的系统数据库pg_shadow进行认证) 、kbr4/kbr5(Kerberos V4/V5认
3 ]$ E+ q, J7 g9 ~5 h
证) 。如在作为Web 数据库使用, 使用passwd口令文件进行本地登录时可如下设置:
; Q+ i8 J6 r+ W
Host all 127.0.0.1 255.255.255.255 password passwd
; l( p: b6 z; R l9 ppasswd文件默认位置为/usr/local/pgsql/data, 有数据库管理权限的用户可以使用
/ d, L/ u" y0 J0 k# V: Q1 Q M5 h! s
pg_passwd命令管理该文件(注意:flat file口令认证方式采用明文传送口令,故要从
网络 m1 w5 Q- \: n% _
上其他主机登录,建议使用crypt认证方式) 。
" Q9 B3 B0 p [, n
- r- g1 o% Y; M0 z. c
1.5.2 用户操作权限设置
. s* N2 Q+ ]9 v, S: [
使用SQL命令grant/revoke可以设置用户/用户组可否使用select/insert/update/rule命令。
. D! [1 r+ J6 w/ C* T* {( D根据SQL标准,一个数据表文件(table) 在刚建立时只有建立该表文件的用户有权访问。
5 `2 p. l9 l- c; k3 P9 M, y6 v
要分配给用户访问权限,可以使用grant命令:
0 E( j1 X$ ~0 m# u) j+ q+ Q) agrant %26lt;权限种类%26gt; on to %26lt;用户/组%26gt;
) ~6 M) Q7 y" N P! k e3 `
权限种类:all,select,insert,update,delete,rule
0 I& Y& ^2 n6 e' ^+ C$ B* `2 stable名:被设置用户访问权限的表文件
# b: O' u# L) U8 ?用户/组:public(所有用户) 或用户名/组名
7 I2 X+ A8 u- I7 f& ?) prevoke命令作用与grant命令相反,用法如下:
9 K+ P8 ]2 I7 E2 ~2 prevoke %26lt;权限种类%26gt; on from %26lt;用户/组%26gt;
, O# {! L6 @% I; @' v8 G [
table已设置的用户权限可以使用pgsql的\z 命令查看。
- c) A, T, P2 f4 @2 N5 g8 l% D
1 A# ?2 x, G$ ?/ \# J% V
! ^5 d5 u' M* I! ]2. ApachePHP3的安装及设置
& }0 v2 b, t" y8 \# d: A* F$ g6 V
2.1 源程序
7 y% j' p9 g0 E) _5 o$ ?Apache和PHP3的最新版本源程序可以从http://www.apache.org/和http://www.php.net/找到。
4 A' J. G$ R( X( n4 s' D以下以Apache 1.3.6和PHP3 3.0.5 为例。
% y- Y# ?' y8 i' X/ ]. K2.2 编译
0 J- o1 g8 q9 C+ [5 \+ m0 o' t% a8 F
假设Apache和PHP3的源程序都保存在/tmp目录下,首先登录为root:
0 Q2 v( d* F. I* J" ~$ su
+ z6 `% B/ m) v) E& o# cd /usr/local/src
, r" S$ q* y- |. F5 l% F# tar -xzvf /tmp/apache_1.3.6.tar.gz
# b1 p9 `9 p0 y
# ./configure
! q" Z4 `* S( x' F
# cd /usr/local/src
/ _- \- L8 B3 g7 C F: k0 F3 F
# tar -xzvf /tmp/php3-3.0.5.tar.gz
) b, T }% D$ c7 x* x# cd php-3.0.5
2 d# I4 Y* O5 W+ I: ^# ./configure --with-pgsql --with-apache=../apache_1.3.6 --enable-track-vars
" y9 l! l! A& `# u/ x# make
# I6 X1 {' F/ T2 F8 I5 O+ E
# make install
3 Z; b0 F7 G3 ?6 z, h+ D4 C! O" l最后一步将建立/usr/local/src/apache_1.3.6/src/modules/php3目录,并将以下文件
3 H, o& @7 }# r) n5 n& e
复制到该目录下:
3 z8 v0 G: S% `Makefile.libdir libmodphp3.a mod_php3.c php_version.h
" @) f: e. V# i7 c6 e% zMakefile.tmpl libphp3.module mod_php3.h
+ ~0 S. M# ^0 H$ y8 Z编译和安装Apache:
. X! Q6 |# Y& Q
设置环境变量LD_LIBRARY_PATH csh和tcsh shell使用以下命令:
/ @* p1 B* _% w( z+ `
# setenv LD_LIBRARY_PATH /usr/local/pgsql/lib
5 y$ G8 F6 t, C& G7 {
sh和bash使用如下命令:
* o3 j# ^7 ]: |' M# LD_LIBRARY_PATH=/usr/local/pgsql/lib
* p# Z/ s& a# t$ s# export LD_LIBRARY_PATH
% s; M6 `9 E+ s, b1 N/ L" k' z然后
# q" J' c8 B' u2 F
# cd /usr/local/src/apache_1.3.6
, ^3 e8 }5 M3 B% [+ @+ P
# ./configure --activate-module=src/modules/php3/libphp3.a
- [2 o8 P. n4 L7 @! r+ `# S/ r# make
0 B' \/ U7 \1 A* f$ O5 `9 x1 j9 P/ P
# make install
' R" P* [( {: x2 V0 J" k* S5 v2.3 修改设置文件
5 N- x0 l! R. B0 I Q1 L: d# cd /usr/local/src/php-3.0.5
# G: |/ r; U( O; T9 V# cp php3.ini-dist /usr/local/lib/php3.ini
4 X+ ?6 J# P+ M" m) e
将/usr/local/apache/etc/srm.conf中以下两行内容前的#号删除,如果以.php3作为PHP3
' K* Q; O* {6 |- v5 S/ g# N文件的扩展名,则将.phtml 更改为 .php3:
5 m3 X1 ^6 ]+ b( u#AddType application/x-httpd-php3 .php3
6 w: V- M" q+ T/ t# L#AddType application/x-httpd-php3-source .phps
: R! Q( \6 q/ j( d在srm.conf文件的DirectoryIndex下增加 index.php3:
' E4 W( W' J: c3 ^2 b
DirectoryIndex index.html index.php3
! w# }4 o7 U' V8 n- k- I ) R5 g3 o# [( ~" J! V/ G& p
2.4 启动Apache
* U; ^$ C! ?+ E: S# /usr/local/apache/sbin/apachectl start
6 y/ X4 d7 @, O/ Dapachectl start: httpd started
% K) J% l! h4 W% j在本地机上启动网络
浏览器,地址栏输入http://localhost/(或在其他
计算机上的
浏览器" W6 l" n, W$ j- h H* a
地址栏输入Apache服务器地址),如能显示出Apache的开始画面则说明Apache已经
+ j& S* ^( n; B- b9 s安装成功。下面测试PHP3模块工作是否正常:
& s4 e; F7 D# D3 k' {9 R, ~
# cd /usr/local/apache/share/htdocs/
5 Z j4 R; m3 Z8 z |
# ln -s /usr/local/src/php-3.0.5 .
) `, P" E* [5 o- n% i
然后在浏览器的地址栏输入http://localhost/php-3.0.5/examples/date.php3
8 \5 R! V6 X1 S& q5 O. J观察php3文件的运行结果是否正常。如日期函数能显示正确结果,则说明PHP3模块工作正常。
) r, _4 b) [- I# U6 h3 Y5 Y: U7 t s$ o% }* ?
至此,基于Apache Web服务器和服务器端脚本语言PHP3的PostgreSQL数据库系统的安装已经完成 :-)
: D- b5 R9 a2 Q
3 }% Y' \& y- x- P/ N! v飞鸿
( t* ~0 N2 T# |99.11.1