~ / 文档 / 源码编译安装 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