OpenEuler-PostgreSQL系列(二):手把手教你源码安装PostgreSQL
一、准备工作
本章节所有安装工作基于OpenEuler22.03,操作系统的安装方法见OpenEuler-PostgreSQL系列(一):手把手教你安装OpenEuler | Hello Mr Liu
需要说明的几点:
1.安装命令如无特殊说明,均采用root用户进行,如采用普通用户按教程安装的,请在命令前增加sudo请求更高级别权限执行;
2.软件包安装命令采用dnf命令,dnf与yum的区别见参考链接;
3.本次安装的PostgresSQL的版本为v14.4;
参考资料:
1.Linux环境下YUM和DNF详细介绍_萧天天天的博客-CSDN博客_dnf yum
2.详解apt、yum、dnf 和 pkg | 《Linux就该这么学》
1.1必备软件包
因为线下已经安装多次,所以不再采用遇山开山的思路,而是根据多次安装的经验,提炼总结,将需要的软件包、组件提前准备好。
根据PostgreSQL源码包安装官方文档说明,源码编译安装所必要的软件包如下(官方说明文档:PostgreSQL: Documentation: 14: 17.2.聽Requirements):
1.make 版本必须>=3.80;✅系统默认满足
2.gcc 至少支持C99编译,推荐最新版本;✅系统默认满足
3.tar 除了 gzip 或 bzip2 之外,还需要 tar 来解压缩源代码分发;✅第一章节最后部分已安装,未安装可以通过"dnf install tar"命令进行安装;
4.Readline Readline-devel:允许 psql(PostgreSQL 命令行 SQL 解释器)记住您键入的每个命令,并允许您使用箭头键来调用和编辑以前的命令。这是非常有帮助的,建议安装;❗️Readline系统默认已安装,但readline-devel未安装;
5.zlib zlib-devel:默认情况下使用 zlib 压缩库;❗️zlib系统默认已安装,但readline-devel未安装;
安装缺失软件包命令如下:
dnf install readline-devel dnf install zlib-devel # 或者可以合并命令一起安装 dnf install readline-devel zlib-devel软件包安装仅安装了必备的软件包,其他可选软件包可根据官方文档选择性安装。
1.2源码包下载
Postgresql下载地址:
PostgreSQL: File Browser 源码包下载
PostgreSQL: Downloads 发行版安装包下载
因PostgreSQL并未提供针对OpenEuler系统的发行版安装包,所以我们需要通过源码编译安装,如果操作系统是其他发行版,也可以通过发行版安装命令直接安装,但是通过源码包编译安装同样适用.
点击源码包下载页的版本文件夹,进入下载页面,选择tar.gz扩展名的文件,右键复制下载链接,通过wget命令进行文件下载(ssh使用root用户登录后默认在root文件夹下):
文件下载命令如下:
wget https://ftp.postgresql.org/pub/source/v14.4/postgresql-14.4.tar.gz二、编译安装
2.1解压源码包
PostgreSQL14.4的源码包已下载,在源码包存放目录执行解压命令解压源码包:
# 解压源码包 tar -xvf postgresql-14.4.tar.gz命令执行完毕后将会在同级目录下生成"postgresql-14.4"文件夹,通过ls或ll命令查看:
2.2编译安装
查看官方说明文档关于安装部分的说明:PostgreSQL: Documentation: 14: Chapter聽17.聽Installation from Source Code
其中17.1章节给出了编译安装所需要的步骤,详细请参阅文档,以下给出相关命令和备注解释:
# 原文链接:https://www.postgresql.org/docs/current/install-short.html (17.1 short version) ./configure ##配置 make ##编译 su ##切换管理员权限 make install ##安装 adduser postgres ##添加postgres用户 mkdir /usr/local/pgsql/data ##创建data存放目录 chown postgres /usr/local/pgsql/data ##给postgres用户授权 su - postgres ##切换到postgres用户(数据库的操作不允许使用root用户) /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data ##初始化数据库 /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start ##启动数据库 /usr/local/pgsql/bin/createdb test ##创建test数据库 /usr/local/pgsql/bin/psql test ##连接test数据库在进行编译安装之前,需要对configure做个说明:
configure文件是一个可执行的脚本文件,它有很多选项,在待安装的源码目录下使用命令./configure –help可以输出详细的选项列表。
其中--prefix选项是配置安装目录,如果不配置该选项,安装后可执行文件默认放在/usr/local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr /local/share,比较凌乱。
如果配置了--prefix,如:
./configure --prefix=/usr/local/test
安装后的所有资源文件都会被放在/usr/local/test目录中,不会分散到其他目录。
基于方便管理和命令执行的逻辑性考虑(减少来回用户切换),将官方给出的编译命令修改如下:
# 0.切换到postgresql-14.4文件夹(系统当前在root用户根目录下) cd postgresql-14.4 # 1.配置安装目录:/usr/local/postgresql ./configure --prefix=/usr/local/postgresql # 2.编译(耗时较长,耐心等待) make # 3.安装 make install # 4.创建PostgreSQL数据存放目录(可根据实际情况自行配置数据存储路径,如变更,请同时变更命令10和11) mkdir -p /data/postgresql/data # 5.创建PostgreSQL日志存放目录(可根据实际情况自行配置日志存储路径,如变更,请同时变更命令11) mkdir -p /data/postgresql/logs # 6.创建postgres用户 adduser postgres # 7.给postgres用户授权访问data和logs目录 chown postgres /data/postgresql/data chown postgres /data/postgresql/logs # 8.切换到postgres用户(数据库操作不允许使用root用户) su - postgres # 9.创建日志文件【postgres用户】 cd /data/postgresql/logs touch server.log # 10.初始化数据库【postgres用户】 /usr/local/postgresql/bin/initdb -D /data/postgresql/data # 11.启动数据库【postgres用户】 /usr/local/postgresql/bin/pg_ctl -D /data/postgresql/data -l /data/postgresql/logs/server.log start # 12.创建test数据库【postgres用户】 /usr/local/postgresql/bin/createdb test ##创建test数据库 # 13.连接test数据库【postgres用户】 /usr/local/postgresql/bin/psql test ##连接test数据库按照命令逐一执行即可安装完毕,截止到当前章节,已经可以在本机执行一些PostgreSQL的命令进行实验。但是目前外部机器或工具暂时无法连接该数据库,远程连接的配置见下个章节说明。
三、配置远程连接
以下操作如无特殊说明,均采用postgres用户(指操作系统用户)操作命令。
3.1修改数据库postgres的密码
# 我们从外部采用工具连接该数据库,需要知道数据库用户和对应的密码 # 连接默认postgres数据库; /usr/local/postgresql/bin/psql # 修改数据库用户postgres的密码为postgres; ALTER USER postgres WITH PASSWORD postgres;3.2修改postgresql配置文件
允许远程连接,还需要修改postgresql的数据存储目录(/data/postgresql/data)下的两个配置文件:
pg_hba.conf :访问控制配置文件;
postgresql.conf :postgresql主配置文件
data目录结构如下:
pg_hba.conf需要修改如下:
即是修改后:
host all all 0.0.0.0/0 md5
postgresql.conf需要修改如下:
即是修改后:
# Connection Setting -
listen_address = *
3.3修改防火墙配置
配置完毕后应在防火墙对5432端口放行,采用root账号执行。执行命令如下:
exit ##退出postgres账号 ##以下命令在root账户下执行 sudo firewall-cmd --zone=public --add-port=5432/tcp --permanent ##配置防火墙放行5432端口 sudo firewall-cmd --reload ##防火墙重新加载配置文件3.4连接测试
数据库连接测试之前需要先切换到postgres用户重启一下postgresql的服务以确保配置生效,执行的命令如下:
# 切换为postgres用户 su - postgres # 重启postgresql服务(也可以先stop再start,替换后面的restart参数即可) /usr/local/postgresql/bin/pg_ctl -D /data/postgresql/data -l /data/postgresql/logs/server.log restart然后使用Navicat测试是否可以正常连接:
四、配置环境变量
截止到现在如果我们想在安装postgresql的服务器使用psql或其他提供的工具连接数据库,就必须输入psql的全路径来调用,如:
/usr/local/postgresql/bin/psql 并不是很方便,此时我们可以将postgresql配置到系统环境变量里面去,注意:请配置到postgres用户或者其他自定义操作postgresql的用户的bash_profile环境变量中,不要配置到root账号的环境变量中,或者可以配置到etc/profile中,单独配置到root的环境变量中时不能使用的。这里图省事以root用户配置全局环境变量文件(配置完成后以root用户是无法执行psql命令的):
vi /etc/profile ##将如下内容添加到文件末尾 PATH=/usr/local/postgresql/bin:$PATH export PATH ##保存退出后执行刷新配置 source /etc/profile ##切换到postgres用户 su - postgres ##此时就可以直接执行psql命令了 psql五、配置开机启动
PostgreSQL的开机自启动配置模板在源码目录的“contrib/start-scripts”目录下:
其中linux文件为linux环境下的开机自启动脚本模板,将其拷贝到“/etc/init.d”目录下,并改名为postgresql:
cp linux /etc/init.d/postgresql切换到/etc/init.d目录,使用vi打开postgresql文件,修改如下参数的值:
#Intalllation prefix prefix=/usr/local/postgresql # Data directory[2021-10-25] PGDATA="/data/postgresql/data" # Who to run the postmaster as, usually "postgres". (NOT "root") # 将启动用户修改为实际用户,这里使用postgres,所以不变。 PGUSER=postgres #修改后: # Where to keep a log flie PGLOG="/data/postgresql/logs/server.log"目的就是将其中的执行文件、存储目录和日志目录修改为我们实际位置。
然后保存退出。
然后修改postgresql文件的执行权限:
chmod a+x postgresql添加开机启动:
chkconfig --add postgresql然后重启服务器开机验证即可。
六、总结
截止至此,PostgreSQL14.4在OpenEuler22.03下通过源码编译安装结束。
对于PostgreSQL有其他方面安装要求的建议查看官方的说明文档。
文档链接:PostgreSQL: Documentation: 14: PostgreSQL 14.4 Documentation
如有其他问题,可通过评论留言或者联系QQ:49849668一起探讨。
文章作者: Mr Liu
首发链接:
https://it-liupp.gitee.io/2022/07/04/openeuler-pgsql02/版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源
我告诉你msdn版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!