一.PostgreSQL简介
PostgrepSQL是一种对象关系型数据库管理系统。
二.PostgreSQL环境的安装和配置
2.1源码的下载
PostgreSQL 14.0源码可以从PostgreSQL官网:https://www.postgresql.org/download/ 的下载区获取。获取之后将其解压。
源码目录内容,如下图所示:
2.2 环境配置
安装之前首先为系统配置环境,这个过程通过运行上图中的configure脚本文件即可,命令如下:
./configure
注意:安装的时候,遇到两个问题,新环境高频出现,可以通过最后一章中的方法进行解决。
2.3 编译
配置好环境变量之后,对源码进行编译。2.1图中,可以看到已经有完整的makefile文件,在目录下执行下面的命令,进行编译:
make clean all
编译过程大约持续5~30min。
2.4 回归测试
如果想在安装文件前测试新编译的服务器,那么可以在这个时候运行回归测试。回归测试是一个用于验证PostgreSQL在你的系统上是否按照开发人员设想的那样运行的测试套件。通过下面命令执行:
make check
如果执行结果如下,代表检查通过:
注意:这个命令只能在非特权用户下运行,不能在root权限下运行
2.5 安装、卸载、清理文件
(1)安装
安装PostgreSQL,需要输入下面的命令:
sudo make install
由于install命令需要在root权限下执行,所以需要按上面的命令执行。
(2)卸载
如果想要卸载安装,则执行下面的命令即可,需要注意此命令不会删除任何创建出来的目录:
sudo make uninstall
(3)清理
编译之前可以通过make clean命令,将之前的编译文件进行删除,避免对后续的编译产生影响。
2.6 安装后进行设置
2.6.1 创建用户
root用户不能启动postgresql,所以需要创建一个普通用户来启动数据库,如下图所以,创建用户并设置登录口令。注意:下面两条命令均需在root权限下执行。
命令1:$sudo useradd postgres
没有其他输出,代表成功。
命令2:$sudo passwd postgres
输入类似于这样的密码,可以成功ht3pki2008!!
如下图所示:
2.6.2 设定权限
在postgresql目录下创建目录data(数据库存储)和log(日志存储),然后将postgresql的目录权限全部赋予给postgres用户。
命令1:$sudo mkdir /usr/local/pgsql/data
命令2:$sudo mkdir /usr/local/pgsql/log
命令3:$sudo chown -R postgres:postgres /usr/local/pgsql
2.6.3 共享库
在一些有共享库的系统里,需要告知本地系统如何找到新安装的共享库。设置共享库的搜索路径的方法因平台而异,本机是Linux系统,因设置命令需要root权限,故在安装之后运行下面命令进行设置:
sudo /sbin/ldconfig /usr/local/pgsql/lib
设置后,可以在运行时,让链接器更快地找到共享库。
2.6.4 环境变量
1. 将PG添加到环境变量
本机PG安装路径为/usr/local/pgsql,安装到此目录或者其他默认不在搜索路径中的地方,应该在本地的PATH环境变量里面增加一个/usr/local/pgsql/bin。
上面的操作非必须,但可以在使用PG更方便。
将下面的几行加到shell启动文件即可,如:~./bash_profile()如果想影响所有用户就放在/etc/profile):
export PGDATA=/usr/local/pgsql/data
export PGHOME=/usr/local/pgsql
export PATH=$PGHOME/bin:$PATH
注意:/etc/profile文件需要root权限操作,所以在修改的时候可以使用sudo vim /etc/profile,打开文件修改。
2. man文档添加到环境变量
为了让系统找到man文档,将下面的内容添加到shell启动文件里:
MANPATH=/usr/local/pgsql/share/man:$MANPATH
export MANPATH
修改完成后,使用下面的命令使其生效:
命令1:sudo -s(切换到root权限)
命令2:source /etc/profile
2.6.5 初始化数据库
切换为postgres用户,使用initdb --help可以看到初始化数据库的帮助信息,如下图所示:
命令1:$initdb --help
图中红框中文字所示,由于之前在配置文件中已经设定了环境变量PGDATA,因此可以直接使用命令initdb来完成数据库初始化操作。
首先,切换到postgres用户,命令:#su - postgres
然后,初始化数据库,命令:$initdb
如果出现下面的结果,代表初始化成功:
此时,可以发现/usr/local/pgsql/data中已经有文件了,代表已经初始化成功。
2.6.6 配置数据库
首先,进入/usr/local/pgsql/data目录,使用命令vim pg_hba.conf,配置对数据库的访问控制(设置为可以通过密码访问)。如下图所示:
然后,使用命令vim postgresql.conf,配置数据库参数(设置服务器监听整个网络,设置端口号为5432)。如下图所示:
2.6.7 关闭防火墙(root用户)
使用命令systemctl status firewalld.service查看防火墙状态,如图13所示:
通过上图可知,防火墙属于关闭状态。
如果查看到防火墙处于开启状态,如下图:
若想将其关闭,使用命令sudo systemctl stop firewalld.service关闭防火墙。(ps:使用命令systemctl disable firewalld.service,可以停用防火墙开机自启)
2.6.8 配置系统服务(root用户)
进入postgresql源码包的解压目录(本文为/home/10318001@zte.intra/Desktop/王泽辉的工作空间/postgreSQL源码/postgresql-14.0),执行命令
cp contrib/start-scripts/linux /etc/init.d/postgresql
然后执行vim /etc/init.d/postgresql,查看配置信息是否如下图所示,若不同,请按下面的方式配置:
然后使用命令chmod +x /etc/init.d/postgresql(需在root权限下执行),赋予该文件执行权限。另外,还可以使用命令chkconfig --add postgresql(需在root权限下执行),设置服务开机自启。
2.6.9 启动及链接数据库
1. 启动数据库服务
使用命令#service postgresql start(需要root权限),启动数据库服务。可以通过命令:$sudo ps -ef | grep postgres,查看postgres相关进程,如下图所示:
3. 链接数据库
通过上述方法启动数据库后,便可通过postgresql自带的客户端工具psql来进行链接(psql二进制文件在/usr/local/pgsql/bin,因为已经配置环境变量,所以全局也可执行)。
请按如下的步骤进行操作:
(1) 在postgresql用户下直接输入命令:$psql,看到版本信息则说明链接成功。
(2) 然后,使用”\password”,设置密码。如下图所示:
(3) 验证非本地客户端工具的链接。
最后也是最重要的一步,就是验证非本地客户端工具的连接。本文选择的工具是Navicat Premium,在主机(Window10)打开Navicat与虚拟机中的postgresql服务器进行连接测试,如下图所示:
(4) 停止数据库连接服务
若想停止数据库服务,可以在root权限下执行命令:#service postgresql stop
总结:以上就是linux环境下源码编译安装PostgreSQL的全过程。
十.错误及解决办法
10.1 安装PG时,执行configure脚本报错
问题一:
1. 安装前,执行configure配置文件时,报下面错误
configure: error: readline library not found
If you have readline already installed, see config.log for details on the
failure. It is possible the compiler isnt looking in the proper directory.
Use --without-readline to disable readline support.
2. 解决办法
(1)根据提示是没有安装readline包,首先检查是否安装readline包
由上可知,系统中已经安装了readline包。
(2)通过yum查询readline包,观察都有哪些相关的包
由上可知,readline-devel.i686和readline-devel43.i386可能未安装,尝试安装readline-devel包。
(3)尝试安装readline-devel包
注意,执行这个安装命令,需要在root权限下安装,用下面命令即可。
显示“完毕”之后,即代表安装完成。
(3)再次执行configure脚本,即可通过。
问题二:
1. 安装前执行configure脚本,报下面的错误
checking for inflate in -lz... no
configure: error: zlib library not found
If you have zlib already installed, see config.log for details on the
failure. It is possible the compiler isn't looking in the proper directory.
Use --without-zlib to disable zlib support.
2. 解决办法
(1)首先检查系统中是否安装zlib包
(2)通过yum查看zlib包,查看哪些包缺失
通过上述查看可知,zlib-devel需要安装。
(3)安装zlib-devel
由于安装需要root权限,采用下面的命令安装即可,如下图:
(4)继续执行configure脚本,执行成功,问题得到解决。