概述
注意事项
软件包的来源
安装软件包需要注意的问题
编译和安装
编译和优化
用postgres数据库超级用户完成数据库的安装
清除不必要的文件
配置
配置“/etc/rc.d/init.d/postgresql”脚本文件
概述
PostgreSQL最早是由UC Berkley大学计算机系开发的,它的许多先进的“对象-关系”概念现在已经在一些商业数据库里得到应用。 PostgreSQL支持SQL92/SQL3,事务完整性和可扩展性。它现在是一个源于Berkley代码并公开源代码的数据库。
注意事项
下面所有的命令都是Unix兼容的命令。
源路径都为“/var/tmp”(当然在实际情况中也可以用其它路径)。
安装在RedHat Linux 6.1下测试通过。
要用“root”用户进行安装。
PostgreSQL的版本是6_5_3。
而且一定要先安装egcs-c++-1.1.2-24.i386.rpm软件包。
软件包的来源
PostgreSQL的主页:http://www.postgresql.org/。
必须确保下载:postgresql-6_5_3_tar.gz。
安装软件包需要注意的问题
在安装PostgreSQL前后保存一下文件列表对你也许是一个好主意,而后用diff比较一下两个文件列表从而找出PostgreSQL的文件被安装到哪里去了,方法是在安装PostgreSQL之前运行一下“find /* > sql1”,而在安装PostgreSQL服务之后运行 “find /* > sql2”,接着执行命令“diff sql1 sql2 > sql”从而得到安装文件列表。
编译和安装
把软件包(tar.gz)解压缩:
[root@deep]# cp postgresql-version_tar.gz /var/tmp
[root@deep]# cd /var/tmp
[root@deep]# tar xzpf postgresql-version_tar.gz
编译和优化
第一步:
首先,创建postgres这个数据库超级用户(你也可以用别的名字,不过通常就用这个)。命令为:
[root@deep]# useradd -M -o -r -d /var/lib/pgsql -s /bin/bash -c "PostgreSQL Server" -u 40
postgres >/dev/null 2>&1 || :
注意:2>&1 是把stderr输出到 stdout上。
第二步:
在编译PostgreSQL之前。首先看一下“egcs-c++-1.1.2-24.i386.rpm”是不是已经安装。没有的话,那就赶紧装吧。“egcs-c++-1.1.2-24.i386.rpm”直接可从Redhat的光盘里获得,在“RedHat/RPMS”下。
验证egcs-c++-1.1.2-24.i386.rpm是否安装,用命令:
[root@deep]# rpm -q egcs-c++
安装egcs-c++-1.1.2-24.i386.rpm,用命令:
[root@deep]# rpm -Uvh egcs-c++-1.1.2-24.i386.rpm
第三步:
进入到PostgreSQL的源代码的目录:
[root@deep]# cd src
设置编译参数:
CC="egcs"
./configure
--prefix=/usr
--enable-locale
这些编译参数告诉编译器如何编译PostgreSQL:
l 使“locale”有效
编辑Makefile.global(vi +210 Makefile.global),并做如下改变:
CFLAGS= -I$(SRCDIR)/include -I$(SRCDIR)/backend
改为:
CFLAGS= -I$(SRCDIR)/include -I$(SRCDIR)/backend -O9 -funroll-loops -ffast-math -malign-double -mcpu=
pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions
这是对PostgreSQL的一些优化设置。当然,你要根据自己的实际情况改变它。
运行下面的命令:
[root@deep]# make all
[root@deep]# cd ..
[root@deep]# make -C src install
[root@deep]# make -C src/man install
[root@deep]# mkdir -p /usr/include/pgsql
[root@deep]# mv /usr/include/access /usr/include/pgsql/
[root@deep]# mv /usr/include/commands /usr/include/pgsql/
[root@deep]# mv /usr/include/executor /usr/include/pgsql/
[root@deep]# mv /usr/include/lib /usr/include/pgsql/
[root@deep]# mv /usr/include/libpq /usr/include/pgsql/
[root@deep]# mv /usr/include/libpq++ /usr/include/pgsql/
[root@deep]# mv /usr/include/port /usr/include/pgsql/
[root@deep]# mv /usr/include/utils /usr/include/pgsql/
[root@deep]# mv /usr/include/fmgr.h /usr/include/pgsql/
[root@deep]# mv /usr/include/os.h /usr/include/pgsql/
[root@deep]# mv /usr/include/config.h /usr/include/pgsql/
[root@deep]# mv /usr/include/c.h /usr/include/pgsql/
[root@deep]# mv /usr/include/postgres.h /usr/include/pgsql/
[root@deep]# mv /usr/include/postgres_ext.h /usr/include/pgsql/
[root@deep]# mv /usr/include/libpq-fe.h /usr/include/pgsql/
[root@deep]# mv /usr/include/libpq-int.h /usr/include/pgsql/
[root@deep]# mv /usr/include/ecpgerrno.h /usr/include/pgsql/
[root@deep]# mv /usr/include/ecpglib.h /usr/include/pgsql/
[root@deep]# mv /usr/include/ecpgtype.h /usr/include/pgsql/
[root@deep]# mv /usr/include/sqlca.h /usr/include/pgsql/
[root@deep]# mv /usr/include/libpq++.H /usr/include/pgsql/
[root@deep]# mkdir -p /usr/lib/pgsql
[root@deep]# mv /usr/lib/*source /usr/lib/pgsql/
[root@deep]# mv /usr/lib/*sample /usr/lib/pgsql/
[root@deep]# mkdir -p /var/lib/pgsql
[root@deep]# chown -R postgres.postgres /var/lib/pgsql/
[root@deep]# chmod 755 /usr/lib/libpq.so.2.0
[root@deep]# chmod 755 /usr/lib/libecpg.so.3.0.0
[root@deep]# chmod 755 /usr/lib/libpq++.so.3.0
[root@deep]# strip /usr/bin/postgres
[root@deep]# strip /usr/bin/postmaster
[root@deep]# strip /usr/bin/ecpg
[root@deep]# strip /usr/bin/pg_id
[root@deep]# strip /usr/bin/pg_version
[root@deep]# strip /usr/bin/pg_dump
[root@deep]# strip /usr/bin/pg_passwd
[root@deep]# strip /usr/bin/psql
[root@deep]# rm -f /usr/lib/global1.description
[root@deep]# rm -f /usr/lib/local1_template1.description
对上面命令的解释如下:
“make”命令把所有的原程序编译并产生可执行程序。然后用 “make install”把可执行文件和另外一些需要的文件安装到系统。用 “mkdir”在“/usr/include”和“/usr/lib”下各产生产生“pgsql”的目录。然后用mv把所有在 “/usr/include”和“/usr/lib”下和PostgreSQL相关的文件和目录分别全部移到“/usr/include/pgsql”和 “/usr/lib/pgsql”下。
“chown”命令是用来设置“/var/lib/pgsql”目录的正确的权限。“strip”命令将去掉指定文件的一些符号标记比如调试信息等,这样文件会变小一点。这可以提高可执行文件一点速度。
“rm”命令去掉一些PostgreSQL不需要的文件。
用postgres数据库超级用户完成数据库的安装
[root@deep]# su postgres
[postgres@deep]# initdb --pglib=/usr/lib/pgsql --pgdata=/var/lib/pgsql
We are initializing the database system with username postgres (uid=40).
This user will own all the files and must also own the server process.
Creating Postgres database system directory /var/lib/pgsql/base
Creating template database in /var/lib/pgsql/base/template1
Creating global classes in /var/lib/pgsql/base
Adding template1 database to pg_database...
Vacuuming template1
Creating public pg_user view
Creating view pg_rules
Creating view pg_views
Creating view pg_tables
Creating view pg_indexes
Loading pg_description
[postgres@deep]# chmod 640 /var/lib/pgsql/pg_pwd
[postgres@deep]# exit
注意:不要用“root”用户安装数据库。这样会有很严重的安全问题。
清除不必要的文件
[root@deep]# cd /var/tmp
[root@deep]# rm -rf postgresql-version/ postgresql-version_tar.gz
卸掉“egcs-c++-1.1.2-24.i386.rpm”包以节省空间:
[root@deep]# rpm -e egcs-c++
“rm”命令将删除我们刚才展开的所有原程序和PostgreSQL的tar.gz文件。“rpm –e”将卸掉
“egcs-c++”软件包。
配置
可以到这去下载“floppy.tgz”文件:http: //pages.infinit.net/lotus1/doc/opti/floppy.tgz。把“floppy.tgz”文件解开之后,可以在相应的目录下发现我们在这本书中介绍的所有软件的配置文件。这样就没有必要手工重新生成这些文件,或者用拷贝粘贴的方法把它们粘贴到配置文件中去。不管是打算自己动手生成配置文件还是拷贝现成的,你都要学会自己修改配置文件并且把配置文件拷贝到正确的目录下。下面将具体说明。
为了运行PostgreSQL Database Server,必须创建或者把下面的文件拷贝到相应的目录下:
l 把“postgresql”脚本文件拷贝到“/etc/rc.d/init.d/”目录下。
配置“/etc/rc.d/init.d/postgresql”脚本文件
配置“/etc/rc.d/ini.d/postgresql”脚本文件,用来启动和停止PostgreSQL服务器。
创建“postgresql”脚本文件(touch /etc/rc.d/init.d/postgresql)并加入:
#! /bin/sh
# postgresql This is the init script for starting up the PostgreSQL
# server
# chkconfig: 345 85 15
# description: Starts and stops the PostgreSQL backend daemon that handles
# all database requests.
# processname: postmaster
# pidfile: /var/run/postmaster.pid
#
# Source function library.
. /etc/rc.d/init.d/functions
# Get config.
. /etc/sysconfig/network
# Check that networking is up.
# Pretty much need it for postmaster.
[ ${NETWORKING} = "no" ] && exit 0
[ -f /usr/bin/postmaster ] || exit 0
# This script is slightly unusual in that the name of the daemon (postmaster)
# is not the same as the name of the subsystem (postgresql)
# See how we were called.
case "$1" in
start)
echo -n "Checking postgresql installation: "
# Check for the PGDATA structure
if [ -f /var/lib/pgsql/PG_VERSION ] && [ -d /var/lib/pgsql/base/template1 ]
then
# Check version of existing PGDATA
if [ `cat /var/lib/pgsql/PG_VERSION` != '6.5' ]
then
echo "old version. Need to Upgrade."
echo "See /usr/doc/postgresql-6.5.2/README.rpm for more information."
exit 1
else
echo "looks good!"
fi
# No existing PGDATA! Initdb it.
else
echo "no database files found."
if [ ! -d /var/lib/pgsql ]
then
mkdir -p /var/lib/pgsql
chown postgres.postgres /var/lib/pgsql
fi
su -l postgres -c '/usr/bin/initdb --pglib=/usr/lib/pgsql --pgdata=/var/lib/pgsql'
fi
# Check for postmaster already running...
pid=`pidof postmaster`
if [ $pid ]
then
echo "Postmaster already running."
else
#all systems go -- remove any stale lock files
rm -f /tmp/.s.PGSQL.* > /dev/null
echo -n "Starting postgresql service: "
su -l postgres -c '/usr/bin/postmaster -i -S -D/var/lib/pgsql'
sleep 1
pid=`pidof postmaster`
if [ $pid ]
then
echo -n "postmaster [$pid]"
touch /var/lock/subsys/postgresql
echo $pid > /var/run/postmaster.pid
echo
else
echo "failed."
fi
fi
;;
stop)
echo -n "Stopping postgresql service: "
killproc postmaster
sleep 2
rm -f /var/run/postmaster.pid
rm -f /var/lock/subsys/postgresql
echo
;;
status)
status postmaster
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: postgresql {start|stop|status|restart}"
exit 1
esac
exit 0
现在让脚本可执行并设置它的缺省权限:
[root@deep]# chmod 700 /etc/rc.d/init.d/postgresql
用下面命令创建“rc.d”目录下PostgresSQL的符号链接:
[root@deep]# chkconfig --add postgresql
用下面的命令手工启动PostgreSQL:
[root@deep]# /etc/rc.d/init.d/postgresql start