分享
 
 
 

第十章LinuxPostgreSQLDatabase服务器(一)

王朝system·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

概述

注意事项

软件包的来源

安装软件包需要注意的问题

编译和安装

编译和优化

用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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有