2.2.3 编译及安装
在默认情况下一般要使用数据库中的压缩功能,而这一功能的实现需要第三方的zlib压缩开发包支持,注意是开发包。在不同的Linux发行版本下,此包的名字可能会不太一样,但包的名字中一般都含有“zlib”字样,在Red Hat/CentOS中,该开发包名字后面带“-devel”,而在Ubuntu中是带“-dev”。如在CentOS7.X下,我们可以使用如下方法查找zlib开发包:
[root@pg01 ~]# yum search zlib |grep devel zlib-devel.x86_64 : Header files and libraries for Zlib development zlib-devel.i686 : Header files and libraries for Zlib development zlib-static.i686 : Static libraries for Zlib development zlib-static.x86_64 : Static libraries for Zlib development
从上面列出的包来看,“zlib-devel.x86_64”是我们需要的zlib开发包。如果是在Ubuntu18.04下,需要的包的名称是“zlib1g-dev”。通常在不同的Linux发行版本下,还需要依靠一些经验来确定需要安装哪个包。
如果想要方便地在psql中使用上下方向键把历史命令找出来,按照PostgreSQL官方手册的说明,还需要安装readline开发包,用相似的方法可查找包含“readline”和“devel”的包:
[root@pg01 ~]# yum search readline |grep devel readline-devel.x86_64 : Files needed to develop programs which use the readline readline-devel.i686 : Files needed to develop programs which use the readline
从上面列出的包来看,“readline-devel.x86_64”就是我们需要的readline开发包。
将前面下载的压缩包解压,如果该压缩包名称为“postgresql-12.2.tar.bz2”,则解压命令如下:
tar xvf postgresql-12.2.tar.bz2
编译安装的“第一板斧”是运行“configure”,对于PostgreSQL9.X及之后的版本,一般编译安装的命令如下:
./configure --prefix=/usr/local/pgsql12.2 --with-perl --with-python
但是对于PostgreSQL8.X的老版本,需要在configure的命令上加“--enable-thread-safety”,如下:
./configure --prefix=/usr/local/pgsql8.4.17 --enable-thread-safety --with-perl --with-python
加这个选项的原因在于,在日常使用中,一般要求客户端是线程安全的,PostgreSQL9.X版本之后考虑到这个问题,默认改成线程安全的了。而PostgreSQL8.X没有做成这样,所以要加上这个选项。
另外,再来看如下两个选项。
·--with-perl:加上该选项才能使用Perl语法的PL/Perl过程语言来编写自定义函数。使用该项要先安装perl开发包,该包在Ubuntu或Debian下名为“libperl-dev”,可使用“apt-get install libperl-dev”命令来安装。
·--with-python:加上该选项才能使用Python语法的PL/Python过程语言来编写自定义函数。使用该选项要先安装python-dev开发包,该包在Ubuntu或Debian下名为“python-dev”,可使用“apt-get install python-dev”来安装。
编译安装的“第二板斧”是make命令,该命令比较简单,直接运行即可:
make
按官方文档要求,使用make命令时,其版本要在gmake v3.8以上,目前绝大多数Linux发行版本都满足要求,所以一般在Linux环境下不需要检测make版本,但如果是在其他非Linux的UNIX平台上,建议先检测make的版本,检测命令如下:
osdba@osdba-laptop:~$ make --version GNU Make 3.81 Copyright (C) 2006 Free Software Foundation, Inc.
在其他UNIX平台上,可能存在非GNU的make,此时GNU的make的名称会是“gmake”。
编译安装的“第三板斧”是运行make install命令,如果是在一般用户下进行编译,可能对“/usr/local”目录没有写的权限,所以运行make install命令时需要使用root权限,在Debian或Ubuntu下可以使用sudo命令:
sudo make install
前面我们看到--prefix设置的路径为“/usr/local/pgsql12.2”,如果不进行设置,默认的路径将是“/usr/local”,为什么要在此路径上加上PostgreSQL的版本号呢?这是为了方便升级。make install命令运行完成后,还要进入“/usr/local”目录,为“/usr/local/pgsql12.2”建立一个/usr/local/pgsql链接:
cd /usr/local sudo ln -sf /usr/local/pgsql12.2 /usr/local/pgsql
如果我们要升级到PostgreSQL12.3,在编译PostgreSQL12.3后,只需停掉现有的数据库,然后将链接“/usr/local/pgsql”指向新版本的目录“/usr/local/pgsql12.3”即可完成升级。这样是不是很方便呢?