当前位置: 首页 > news >正文

Kylin V10源码编译PostgreSQL 14实战指南

1. 为什么选择源码编译PostgreSQL 14?

在国产化操作系统Kylin V10上部署PostgreSQL时,很多朋友第一反应是直接使用yum或rpm安装。但实际工作中,我遇到过好几次因为依赖库版本冲突导致安装失败的情况。比如系统自带的openssl是1.0版本,而PostgreSQL 14要求1.1以上版本,这时候源码编译就成了最靠谱的解决方案。

源码编译最大的优势是灵活可控。你可以:

  • 自由指定安装路径(比如/opt/pg14)
  • 按需启用/禁用功能模块
  • 针对特定硬件做编译优化
  • 彻底解决依赖版本冲突问题

最近在给某金融机构做国产化迁移时,他们的Kylin V10服务器就遇到了libreadline版本不兼容的问题。通过源码编译加上--without-readline参数,我们完美绕过了这个坑。下面我就把完整的踩坑经验分享给大家。

2. 编译前的准备工作

2.1 环境检查

首先登录你的Kylin V10系统,用以下命令检查基础环境:

cat /etc/kylin-release # 确认系统版本 uname -m # 查看CPU架构 free -h # 内存检查 df -h # 磁盘空间检查

建议预留至少2GB内存和5GB磁盘空间。我曾经在虚拟机测试时分配了1GB内存,结果make过程频繁被OOM killer终止,后来扩容到2GB才顺利编译完成。

2.2 依赖安装

PostgreSQL编译需要这些基础开发工具:

yum groupinstall "Development Tools" -y yum install readline-devel zlib-devel openssl-devel -y

特别注意:Kylin的默认源可能缺少某些包。如果遇到依赖问题,可以尝试:

  1. 挂载Kylin安装镜像作为本地yum源
  2. 添加EPEL扩展源(需自行评估合规性)
  3. 手动编译缺失的依赖库

比如上次我在某保密项目中就遇到了openssl-devel版本过低的问题,最终是通过下载openssl 1.1.1源码手动编译解决的。

3. 编译安装全流程

3.1 源码获取与解压

推荐从PostgreSQL官网下载源码包:

wget https://ftp.postgresql.org/pub/source/v14.11/postgresql-14.11.tar.gz tar -xvf postgresql-14.11.tar.gz cd postgresql-14.11

小技巧:下载后用md5sum校验文件完整性。我有次就因为网络问题导致压缩包损坏,编译到一半报错,浪费了两小时排查时间。

3.2 配置编译选项

执行configure前,建议先创建安装目录:

mkdir -p /opt/pg14

然后运行配置命令:

./configure --prefix=/opt/pg14 \ --with-openssl \ --with-zlib \ --without-readline

参数说明

  • --prefix:指定安装路径
  • --without-readline:当系统readline版本不兼容时使用
  • --with-openssl:启用SSL加密支持

如果配置成功,你会看到类似输出:

... configure: creating ./config.status config.status: creating GNUmakefile config.status: creating src/Makefile.global ...

3.3 编译与安装

接下来就是最耗时的编译阶段:

make -j4 # 根据CPU核心数调整并行编译数 make install

性能优化

  • 使用-jN参数加速编译(N=CPU核心数×1.5)
  • 内存不足时可以临时创建swap分区
  • 遇到编译错误先执行make clean再重试

我在16核服务器上实测编译耗时约15分钟,而在2核虚拟机上则花了近1小时。

4. 数据库初始化与配置

4.1 创建专用用户

为安全起见,建议创建专用系统用户:

groupadd postgres useradd -g postgres postgres mkdir -p /opt/pg14/data chown -R postgres:postgres /opt/pg14

4.2 环境变量配置

切换到postgres用户,编辑~/.bashrc:

su - postgres vim ~/.bashrc

添加以下内容:

export PATH=/opt/pg14/bin:$PATH export LD_LIBRARY_PATH=/opt/pg14/lib export PGDATA=/opt/pg14/data

使配置生效:

source ~/.bashrc

4.3 初始化数据库

执行初始化命令:

initdb -D /opt/pg14/data --locale=zh_CN.UTF-8

如果看到以下输出说明成功:

... Success. You can now start the database server using: pg_ctl -D /opt/pg14/data -l logfile start

中文编码注意:使用zh_CN.UTF-8时可能会提示文本搜索配置警告,这不会影响正常使用。如果需要全文搜索功能,可以后续手动安装中文分词扩展。

5. 服务管理实践

5.1 启动/停止服务

建议使用pg_ctl管理服务:

# 启动 pg_ctl -D /opt/pg14/data -l /opt/pg14/logfile start # 停止 pg_ctl -D /opt/pg14/data stop # 重启 pg_ctl -D /opt/pg14/data restart

5.2 配置systemd服务(可选)

如果需要开机自启,可以创建service文件:

vim /etc/systemd/system/postgresql14.service

内容示例:

[Unit] Description=PostgreSQL 14 Database Server After=network.target [Service] Type=forking User=postgres Group=postgres Environment=PGDATA=/opt/pg14/data ExecStart=/opt/pg14/bin/pg_ctl -D ${PGDATA} start ExecStop=/opt/pg14/bin/pg_ctl -D ${PGDATA} stop Restart=on-failure [Install] WantedBy=multi-user.target

然后执行:

systemctl daemon-reload systemctl enable postgresql14 systemctl start postgresql14

5.3 防火墙配置

如果需要远程访问,记得开放5432端口:

firewall-cmd --add-port=5432/tcp --permanent firewall-cmd --reload

6. 常见问题排查

6.1 编译阶段问题

问题1:configure报错"no acceptable C compiler found"

解决:安装gcc开发工具包

yum install gcc make -y

问题2:make时报错"readline library not found"

解决:安装readline-devel或添加--without-readline参数

6.2 运行阶段问题

问题1:启动时报错"could not create lock file"

解决:检查数据目录权限,确保postgres用户有写权限

chown postgres:postgres /opt/pg14/data

问题2:客户端连接超时

解决:检查pg_hba.conf和postgresql.conf配置:

# 在postgresql.conf中修改: listen_addresses = '*' # 在pg_hba.conf中添加: host all all 0.0.0.0/0 md5

记得修改后要重启服务生效。

http://www.jsqmd.com/news/655786/

相关文章:

  • 手把手教你用GitHub和Zenodo管理预印本,实现论文版本控制与数据开源
  • 2026广东塑木地板厂家技术指南:从选型到售后全解析 - 速递信息
  • 根节点不存完整行数据!InnoDB B + 树「层级分工 + 索引定位」全拆解
  • 为什么92%的AI编程工具在中文+英文混合场景下生成失效?——全链路多语言上下文建模白皮书首发
  • 2026年3月不锈钢方棒品牌哪个好,不锈钢光圆/不锈钢黑棒/锻棒/不锈钢方棒/不锈钢六角棒,不锈钢方棒品牌找哪家 - 品牌推荐师
  • VRC Gesture Manager实战指南:从动画预览到专业调试的全流程解析
  • 若依(RuoYi)项目Excel导出慢?别急着加服务器,先看看这个字典缓存优化方案
  • Docker部署Mysql
  • SITS2026白皮书技术内核拆解:从AST重写引擎到语义沙盒机制,为什么说这是首个可审计、可回滚的生成式编码标准?
  • 终极开源ITOM平台部署指南:15分钟快速搭建NeatLogic运维管理平台
  • 为什么83%的AI生成代码未通过OWASP ASVS 4.0?智能代码生成安全风险评估的4个致命盲区与合规落地路线图
  • 信捷HMI与西门子S7-1200的TCP通信实战:从配置到抓包全解析
  • 从手机修图到工业检测:深入浅出聊聊直方图均衡(HE/AHE/CLAHE)到底该怎么选
  • Winhance中文版:构建Windows系统优化的终极解决方案
  • 基于Matlab/Simulink的纯电动汽车仿真模型(包括电池、电机等模块)
  • SAP CO-PA数据传送实战:销售开票与FI/MM记账的配置避坑指南(KEKF/KE4I/KEI2)
  • 2026年华东华中热力工程保温管道系统:蒸汽直埋、预制管网与节能技术全景(含官方联系方式) - 精选优质企业推荐官
  • 细胞因子聚焦:白细胞介素家族中的抗炎“卫士”
  • 分期乐微信立减金回收靠谱吗?深度解析回收流程 - 团团收购物卡回收
  • 从 “能用” 到 “好用”:集之互动以工程化服务提升 AI 短剧品质
  • 云原生环境中的边缘计算:从K3s到生产实践
  • 治疗用免疫细胞体外培养时如何兼顾T细胞扩增与TCM表型维持【曼博生物官方提供Sexton hPL】 - 上海曼博生物
  • 【头部金融科技实战复盘】:如何将AI生成代码上线缺陷率压至0.08‰——质量保障五阶跃迁路径
  • 告别手动清理!用这3款免费工具一键彻底卸载Unity(附注册表备份教程)
  • MAA明日方舟助手:开源游戏自动化框架的技术深度解析
  • openGauss JDBC 驱动源码调试实战:从环境配置到断点追踪
  • CCD与CMOS技术对比
  • OSI七层模型
  • FreeCAD绘图尺寸标注实战:从工程图新手到标注高手
  • Windows系统优化终极指南:如何用开源工具彻底解决C盘爆红问题