2009年1月3日星期六

PostgreSQL 数据库系统 *NIX 简易安装指南

环境需求

实现本文过程使用的环境如下: ::

  • Ubuntu 8.10
  • gcc 4.2
  • g++ 4.1

本文涉及的内容同样适用于KUbuntu,其它Linux可能在启动设置上略有差别,编译与安装过程也同样适用于类似的UNIX操作系统。

参考文献

PostgreSQL 8.3.5 Document : Install Procedure

注意事项

很多Linux发行版的软件库中都集成了 PostgreSQL。例如ubuntu可以通过

sudo apt-get install postgresql

命令直接安装。但是ubuntu的postgresql做了一些定制,命令行位置、调用格式等都略有差别,对于只有官方文档的学习者,可能自己编译更容易掌握和学习。

安装过程

=== 获取代码 ===

  • 下载 Postgresql 的源码(当前最新版本是 8.3.5)。

  • 解压(这里假设下载至~/downloads)

tar vxf ~/downloads/postgresql-8.3.5.tar.gz
  • 进入解压后的源码目录

cd postgresql-8.3.5

配置与编译安装

  • 执行配置命令

./configure

应注意阅读这一步输出的信息,可能你的系统中缺少一些依赖库,可能你想要添加一些其它的设置,如我在这里编译时调用的是:

./configure --with-python --with-perl

* 编译与安装

make
sudo make install

这样编译安装后,数据库位于/usr/local/pgsql目录。

扩展

PostgreSQL 的一些扩展功能,例如tsearch2全文检索,默认不会安装。需要手工安装(使用linux发行版的集成版本时,可能需要单独指定其软件包安装)。

这个安装过程也很简单,只要在源码的contrib子目录下执行make:

cd contrib
make
sudo make install

配置与启动

配置基本信息

首先,PostgreSQL需要一个名为postgres的系统帐户做为默认的超级用户。$pg_path/bin目录下的命令需要以这个用户的身份执行。

sudo adduser

(或许你需要用passwd命令给它设定一个密码)

建立默认的数据存储位置,我遵循文档设定,建在/usr/local/pgsql/data。

sudo mkdir /usr/local/pgsql/data

接下来,要将这个目录的所有权赋给postgres。

sudo chown postgres /usr/local/pgsql/data

然后,初始化数据库目录。这一步需要切换到postgres帐户

su - postgres
/usr/local/pgsql/bin/initdb --locale=zh_CN.utf8 --encoding=utf8 /usr/local/postgres/data

从系统提示来看,ubuntu linux上“--locale=zh_CN.utf8 --encoding=utf8”已经是默认配置了,不需要干涉。

启动与运行

开发人员可以手工启动PosggreSQL,这也需要在postgres用户下。

su - postgres
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data start

pg_ctl可以控制服务运行,详见其help或PosgreSQL文档。

需要以守护进程模式运行在系统后台的话,可以手工配置。在contrib目录下有一个子目录名为start_scripts,分别有freeebsd、linux和osx上的启动脚本示例。这里只介绍linux脚本的使用:::

  • 将contrib/start_scripts/linux文件放到系统的init.d目录:

sudo cp linux /etc/init.d/postgresql
  • 然后建立六个符号链接,该脚本自己的示例是:

sudo ln -s /etc/init.d/postgresql /etc/rc.d/rc0.d/K02postgresql
sudo ln -s /etc/init.d/postgresql /etc/rc.d/rc1.d/K02postgresql
sudo ln -s /etc/init.d/postgresql /etc/rc.d/rc2.d/K02postgresql
sudo ln -s /etc/init.d/postgresql /etc/rc.d/rc3.d/S98postgresql
sudo ln -s /etc/init.d/postgresql /etc/rc.d/rc4.d/S98postgresql
sudo ln -s /etc/init.d/postgresql /etc/rc.d/rc5.d/S98postgresql

然而我用这样的方法在ubuntu上不能启动,经梁庆喜指点,改为如下六个符号链接:

sudo ln -s /etc/init.d/postgresql /etc/rc3.d/S98postgresql
sudo ln -s /etc/init.d/postgresql /etc/rc6.d/K90postgresql
sudo ln -s /etc/init.d/postgresql /etc/rc0.d/K02postgresql
sudo ln -s /etc/init.d/postgresql /etc/rc2.d/S90postgresql
sudo ln -s /etc/init.d/postgresql /etc/rc1.d/S90postgresql
sudo ln -s /etc/init.d/postgresql /etc/rc4.d/S98postgresql
sudo ln -s /etc/init.d/postgresql /etc/rc5.d/S98postgresql

重启即可。

测试

登录到postgres

先确认服务器处于运行状态。然后执行:

su - postgres
/usr/local/pgsql/bin/psql postgres

在此控制台环境下可以查看可用的命名(\?),可以查看SQL语法帮助(\help),可以查看环境信息(\SHOW ALL)。详请可以执行\?查看。

创建新用户

切换到postgres用户下执行创建命令:

su - postgres
/usr/local/pgsql/bin/createuser march

这样会将我系统中的 march 用户与之关联起来。

创建数据库

切换到postgres用户下执行创建命令:

su - postgres
/usr/local/pgsql/bin/createdb -O march UniSearch

-O 参数指定这个数据库的所有者为march。

信任授权

如果从网络无法访问数据库,提示连接被拒绝,可能是权限问题,此时打开数据库目录下的pg_hba.conf,找到类似如下格式的文本(通常在最后):

# IPv4 local connections:
host all all 127.0.0.1/32 trust

将需要信任的IP加入,设为trust。或按照注释文档中的说明进行配置。

附录

INSTALL 文档中的 Short Version 一节

./configure
gmake
su
gmake install
adduser postgres
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &
/usr/local/pgsql/bin/createdb test
/usr/local/pgsql/bin/psql test

没有评论: