~ / 文档 / 源码编译安装 PostgreSQL

1 编译环境

Mac OSX 下只要装了 Xcode 就行,所有编译需要的工具和类库都有了。CentOS 下需要安装下面的软件包。

$ sudo yum install make gcc readline-devel zlib-devel flex bison

如果是从 git 仓库 checkout 出的源码,还需要额外安装下面两个包:

$ sudo yum install flex bison

Debian 下通过下面命令安装编译需要的软件包:

$ sudo aptitude install make gcc libreadline-dev zlib1g-dev

2 下载最新的源码包

Linux 下我喜欢把源码包下载到 /usr/local/src 目录下,Mac OSX 默认没有这个目录,需要创建一个, 参见:建立一个用来进行源码编译的目录。然后从 PostgreSQL 官网下载 最新的源码包。

$ curl -O https://ftp.postgresql.org/pub/source/v9.4.5/postgresql-9.4.5.tar.bz2
$ tar xjvf postgresql-9.4.5.tar.bz2 -C /usr/local/src

3 编译安装到指定目录

将 9.4.5 这个版本编译并安装到 /usr/local/pgsql/9.4.5 这个目录下,然后为该目录创建一个 default的软链接,表示当先正在使用的数据库版本。

$ cd /usr/local/src/postgresql-9.4.5
$ ./configure --prefix=/usr/local/pgsql/9.4.5
$ make
$ sudo make install
$ sudo ln -s /usr/local/pgsql/9.4.5 /usr/local/pgsql/default

4 创建一个数据库管理员用户

Mac OSX 下不能直接创建用户,因为新增的用户默认都有管理员权限,好在系统默认有一个 _postgres 用户可以直接用。 CentOS 下还是需要老老实实的创建一个 postgres 用户。注意两个系统的用户名不同,Mac OSX 的带一个下划线。

$ sudo useradd -c "PostgreSQL Server" postgres

5 数据库初始化

创建一个目录 /var/lib/pgsql,用来存贮数据库的数据文件。并为 postgres 设置访问权限。 用 postgres 创建一个当前主版本的数据目录 9.4,并做一个 default 软链接。注意在 initdb 时指定一个数据库超级用户 postgres, 否则 Mac OSX 使用默认的 _postgres 会有问题。

$ sudo mkdir /var/lib/pgsql
$ sudo chown postgres:postgres /var/lib/pgsql

# 如果是 Mac OSX 应该是 _postgres:wheel 
$ sudo chown _postgres:wheel /var/lib/pgsql

# 如果是 Mac OSX 要将 sudo -u 后的 postgres 改为 _postgres,但最后的 -U postgres 不变
$ sudo -u postgres mkdir /var/lib/pgsql/9.4
$ sudo -u postgres ln -s /var/lib/pgsql/9.4 /var/lib/pgsql/default
$ sudo -u postgres /usr/local/pgsql/default/bin/initdb \
                   -D /var/lib/pgsql/default/data -U postgres

6 数据库访问设置

Mac OSX 主要是本机测试用,不用做下面的设置,如果是 CentOS 服务器上需要下面的设置。 首先指定可以访问数据库的客户端 ip。

$ sudo vi /var/lib/pgsql/default/data/pg_hba.conf

修改防火墙配置,放行 5432 端口的访问。

$ sudo vi /etc/sysconfig/iptables
.....
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT
.....

$ sudo service iptables restart

7 启动数据库

用 postgres 用户启动数据库,并允许外部客户端通过 5432 端口进行访问,只是本机自用的话就去掉 -i 的启动参数。

$ sudo -u postgres /usr/local/pgsql/default/bin/pg_ctl \
                   -D /var/lib/pgsql/default/data -o '-i -p 5432' \
                   -l /var/lib/pgsql/default/pgstartup.log start

正式数据库服务器的 postgres 用户会有自己的 HOME 目录,可以通过下面命令启动

$ sudo -i -u postgres /usr/local/pgsql/default/bin/pg_ctl \
                      -D /var/lib/pgsql/default/data -o '-i -p 5432' \
                      -l /var/lib/pgsql/default/pgstartup.log start

Mac OSX 下启动命令要去掉 sudo 的 -i 参数。

$ sudo -u _postgres /usr/local/pgsql/default/bin/pg_ctl \
                    -D /var/lib/pgsql/default/data -o '-i -p 5432' \
                    -l /var/lib/pgsql/default/pgstartup.log start

Tommy Wang
2016-06-02 12:54:46
Emacs 24.5.1 (Org mode 8.3.4)