第十章LinuxPostgreSQLDatabase服务器(一)
概述注意事项
软件包的来源
安装软件包需要注意的问题
编译和安装
编译和优化
用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”包以节省空间: