下载源代码:
源代码可以通过官网下载: 。从这里可以下载到你所要的源代码。对于选择源代码版本,尽量选择一个合适的版本,这里我选择v9.2.4版本进行安装。
安装前准备:
检查PostgreSQL编译所需软件包:
GNU make version 3.80 or newer is required; other make programs or older GNU make versions will not work. GNU make is often installed under the name gmake; this document will always refer to it by that name. (On some systems GNU make is the default tool with the name make.) To test for GNU make enter:
gmake --version
按官方的要求make 版本需要是3.80或者更高的版本。
-
The GNU Readline library is used by default. It allows psql (the PostgreSQL command line SQL interpreter) to remember each command you type, and allows you to use arrow keys to recall and edit previous commands. This is very helpful and is strongly recommended. If you don't want to use it then you must specify the --without-readline option to configure. As an alternative, you can often use the BSD-licensed libedit library, originally developed on NetBSD. The libedit library is GNU Readline-compatible and is used if libreadline is not found, or if --with-libedit-preferred is used as an option to configure. If you are using a package-based Linux distribution, be aware that you need both the readline and readline-devel packages, if those are separate in your distribution.
如果你需要在psql中使用上下键来查看历史命令,那么你必须安装Readline开发包。
-
The zlib compression library is used by default. If you don't want to use it then you must specify the --without-zlib option to configure. Using this option disables support for compressed archives in pg_dump and pg_restore.
默认情况下,安装会使用到数据库中的压缩功能,而使用这个压缩功能就需要安装zlib开发包,如果你不想使用,你可以在--without-zlib参数来配置。
创建PostgreSQL用户:
root># adduser postgres
root># passwd postgres
Changing password for user postgres.
New password:
BAD PASSWORD: it is based on a dictionary word
Retype new password:
passwd: all authentication tokens updated successfully.
解压源代码:
root># ls postgresql-9.2.4.tar.bz2
root># tar xvf postgresql-9.2.4.tar.bz2
进行编译安装第一步,执行configure命令:
root># ./configure --prefix=/usr/local/pgsql9.2.4 --with-perl --with-python
再看看./configure后面几个参数选项:
> --prefix :这个参数是指定安装目录,如果不指定默认会安装在 /usr/local/pgsql目录下。
> --with-perl :加上这个参数选项,才能够使用perl语法的PL/Perl过程语言写自定义函数,对于比较喜欢使用perl人员来说也是一个不错得参数。
> --with-python :加上这个选项,才能使用python语法的PL/Python过程语言写自定义函数。现在python语言是一门比较火得语言了,会python得人员也是比较多的,所以加上这个选项是很不错得。
如果想使用较大的数据块来提高I/O性能,那么可以添加如下几个参数:
> --with-blocksize :指定数据块大小,默认是8kb,可以调整到1 and 32 (kilobytes)。
> --with-wal-segsize :指定WAL日志文件大小,默认16mb,可以调整到1 and 64 (megabytes)。
> --with-wal-blocksize :指定WAL日志块大小,默认是8kb,可以调整到1 and 64 (kilobytes)。
更多的参数可以参考官方手册:
第二步,执行MAKE命令:
root># make
第三步:执行make install命令:
root># make install
编译完成后,我们进入/usr/local/到为/usr/local/pgsql9.2.4 建立一个/usr/local/pgsql 的链接:
postgresql.db.com<2015-11-22 18:08:30="">
root># cd /usr/local/
postgresql.db.com<2015-11-22 18:09:45=""> /usr/local
root># ln -sf /usr/local/pgsql9.2.4 /usr/local/pgsql
postgresql.db.com<2015-11-22 18:10:21=""> /usr/local
root># ll -lth
lrwxrwxrwx. 1 root root 21 11月 22 18:10 pgsql -> /usr/local/pgsql9.2.4
安装后的配置:
安装完成后,我们需要设置PostgreSQL执行文件路径:
export PATH=/usr/local/pgsql/bin/:$PATH
设置共享库的路径:
export LD_LIBRARY=/usr/local/pgsql/lib
创建数据库簇:
创建数据目录:
root># mkdir pgdata/
root># chown -R postgres:postgres pgdata/
设置数据库中数据目录的环境变量:
export PGDATA=/opt/pgdata
执行下面命令创建数据库簇:
initdb
安装contrib目录下的工具:
contrib目录下有一些比较实用的工具,是第三方组织贡献出来得代码工具,一般情况下都会安装上:
postgresql.db.com<2015-11-22 18:41:42=""> ~/pkg/postgresql-9.2.4/contrib
root># make
root>#make install
启动和关闭数据库:
启动数据库:
postgres>$ pg_ctl start -D /opt/pgdata
server starting
关闭数据库:
postgres>$ pg_ctl stop -D $PGDATA -m fast
waiting for server to shut down.... done
server stopped
这里$PGDATA 指向的就是/opt/pgdata目录,所以直接指定目录和$PGDATA都行。
关闭数据库-m 后的几种参数:
> smart :等待所有得连接终止后,才会关闭数据库。
> fast :快速关闭数据库,断开数据库连接,回滚事务,然后正常关闭数据库。类似ORACLE中的shutdown immedaite操作。
>immediate :立即关闭数据库,断开所有数据库连接,直接退出,待下次启动数据库需进行恢复。相当ORACLE中的shutdown abort操作
在编译安装中所需错误解决:
1: Python错误
configure: error: header file is required for Python
postgres>$ postgres -D /opt/pgdata
LOG: could not bind IPv6 socket: Address already in use
HINT: Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
LOG: could not bind IPv4 socket: Address already in use
HINT: Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
WARNING: could not create listen socket for "localhost"
FATAL: could not create any TCP/IP sockets
这是因为有之前安装了一个postgresql,所以端口被占用,解决:
root># netstat -lnt --查看5432是否占用
关闭postgresql服务:
root># service postgresql stop
Stopping postgresql service: [ OK ]
参考手册: