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

保姆级教程:在Ubuntu 22.04 LTS上从源码编译安装PostgreSQL 18.0(含依赖详解与常见编译错误排查)

深度实战:Ubuntu 22.04源码编译PostgreSQL 18.0全流程与疑难解析

引言

在数据库管理领域,PostgreSQL始终以其强大的功能和稳定性占据重要地位。对于追求性能优化和深度定制的开发者或DBA而言,从源码编译安装PostgreSQL不仅能够获取最新版本特性,还能根据实际需求灵活调整编译参数。Ubuntu 22.04 LTS作为当前长期支持版本,提供了稳定的基础环境,但源码编译过程中可能遇到的依赖问题、配置选项含义不明、编译错误等挑战,往往让许多技术人员望而却步。

本文将不仅仅是一份按部就班的安装指南,而是一套完整的解决方案手册。我们将深入探讨每个依赖包的实际作用,解析关键configure参数对数据库性能的影响,并特别针对编译过程中可能出现的各种错误提供诊断思路和修复方案。无论您是希望在生产环境中部署定制化PostgreSQL实例,还是单纯想深入了解数据库系统的构建过程,这份指南都将成为您不可或缺的参考资源。

1. 环境准备与依赖解析

1.1 系统基础环境配置

在开始编译之前,确保您的Ubuntu 22.04系统处于最新状态:

sudo apt update && sudo apt full-upgrade -y sudo apt autoremove -y

为什么需要full-upgrade而不仅仅是upgrade完整升级会处理可能存在的依赖关系变更,这对于后续的源码编译至关重要。系统内核更新后建议重启:

sudo reboot

1.2 编译工具链安装

PostgreSQL的编译需要完整的开发工具链:

sudo apt install -y build-essential bison flex pkg-config

关键组件解析

  • build-essential:包含gcc/g++编译器、make工具等基础编译环境
  • bisonflex:语法分析器生成工具,用于处理SQL解析
  • pkg-config:帮助定位库文件和头文件位置

1.3 深度依赖包剖析

PostgreSQL的功能模块依赖多个系统库,以下是扩展安装命令及详细说明:

sudo apt install -y \ libreadline-dev \ # 命令行编辑和历史记录功能 zlib1g-dev \ # 数据压缩支持 libssl-dev \ # SSL加密连接 libxml2-dev \ # XML数据类型支持 libxslt-dev \ # XSLT转换功能 libicu-dev \ # 国际化组件(排序规则、Unicode处理) libcurl4-openssl-dev \ # 外部数据包装器http支持 libbz2-dev # 另一种压缩算法支持

注意:Ubuntu 22.04默认的OpenSSL 3.0可能与某些老版本软件存在兼容性问题。如果遇到相关错误,可以考虑安装OpenSSL 1.1兼容包:

sudo apt install -y libssl1.1 libssl-dev=1.1*

2. 源码获取与预处理

2.1 源码下载与验证

建议从官方镜像站获取源码以确保安全性和完整性:

wget https://ftp.postgresql.org/pub/source/v18.0/postgresql-18.0.tar.gz wget https://ftp.postgresql.org/pub/source/v18.0/postgresql-18.0.tar.gz.sha256

验证文件完整性:

sha256sum -c postgresql-18.0.tar.gz.sha256

2.2 源码解压与目录结构

解压源码并进入目录:

tar -zxvf postgresql-18.0.tar.gz cd postgresql-18.0

关键目录说明

  • src/:核心数据库引擎源代码
  • contrib/:附加功能和扩展模块
  • doc/:文档资源
  • config/:配置脚本和模板

3. 编译配置与优化

3.1 configure参数深度解析

执行配置前建议创建专门的构建目录:

mkdir ../pg-build && cd ../pg-build ../postgresql-18.0/configure --prefix=/opt/pgsql/18 \ --with-openssl \ --enable-debug \ --enable-nls \ --with-icu \ --with-libxml \ --with-libxslt

关键参数说明

参数作用推荐场景
--prefix指定安装目录生产环境建议自定义路径
--with-openssl启用SSL加密连接所有需要安全连接的部署
--enable-debug包含调试符号开发环境或问题诊断
--enable-nls本地化语言支持多语言应用环境
--with-icu完整Unicode支持国际化应用
--with-libxmlXML数据类型支持需要处理XML数据的应用

3.2 性能优化选项

对于生产环境,可添加以下优化参数:

CFLAGS="-O2 -march=native" ../postgresql-18.0/configure \ --prefix=/opt/pgsql/18 \ --with-openssl \ --with-icu \ --with-libxml

优化说明

  • -O2:启用编译器优化
  • -march=native:针对当前CPU架构优化

4. 编译与安装

4.1 并行编译技巧

利用多核CPU加速编译:

make -j$(nproc) 2>&1 | tee make.log

编译过程监控

  • 使用htop观察CPU利用率
  • 通过dmesg -w监控内核日志

4.2 安装与权限设置

安装到指定目录:

sudo make install

创建专用系统用户和组:

sudo adduser --system --home /opt/pgsql/18 --shell /bin/bash postgres sudo chown -R postgres:postgres /opt/pgsql/18

5. 数据库初始化与配置

5.1 初始化数据库集群

切换到postgres用户执行初始化:

sudo -u postgres /opt/pgsql/18/bin/initdb -D /opt/pgsql/18/data \ --locale=en_US.UTF-8 \ --encoding=UTF8 \ --data-checksums

关键参数

  • --data-checksums:启用数据页校验(建议生产环境使用)
  • --encoding:设置默认数据库编码
  • --locale:配置区域设置

5.2 基础配置调整

编辑postgresql.conf

sudo -u postgres nano /opt/pgsql/18/data/postgresql.conf

推荐修改项

listen_addresses = 'localhost' max_connections = 100 shared_buffers = 4GB work_mem = 16MB maintenance_work_mem = 256MB

6. 服务管理与自动化

6.1 手动启动与停止

启动服务:

sudo -u postgres /opt/pgsql/18/bin/pg_ctl -D /opt/pgsql/18/data -l /opt/pgsql/18/logfile start

停止服务:

sudo -u postgres /opt/pgsql/18/bin/pg_ctl -D /opt/pgsql/18/data stop

6.2 创建systemd服务单元

创建服务文件/etc/systemd/system/postgresql-18.service

[Unit] Description=PostgreSQL 18.0 Database Server After=network.target [Service] Type=forking User=postgres Group=postgres Environment=PGDATA=/opt/pgsql/18/data OOMScoreAdjust=-1000 ExecStart=/opt/pgsql/18/bin/pg_ctl -D ${PGDATA} -l /opt/pgsql/18/logfile start ExecStop=/opt/pgsql/18/bin/pg_ctl -D ${PGDATA} stop ExecReload=/opt/pgsql/18/bin/pg_ctl -D ${PGDATA} reload TimeoutSec=300 [Install] WantedBy=multi-user.target

启用并启动服务:

sudo systemctl daemon-reload sudo systemctl enable --now postgresql-18

7. 编译常见问题排查指南

7.1 依赖缺失问题

错误现象

configure: error: library 'ssl' is required for OpenSSL

解决方案

  1. 确认libssl-dev已安装:
    sudo apt install libssl-dev
  2. 如果使用自定义OpenSSL路径,指定位置:
    ./configure --with-openssl --with-includes=/usr/local/ssl/include --with-libraries=/usr/local/ssl/lib

7.2 权限问题

错误现象

initdb: error: cannot be run as root

解决方案

  1. 确保使用postgres用户操作:
    sudo -u postgres /opt/pgsql/18/bin/initdb -D /opt/pgsql/18/data
  2. 检查数据目录权限:
    sudo chown -R postgres:postgres /opt/pgsql/18

7.3 内存不足问题

错误现象

virtual memory exhausted: Cannot allocate memory

解决方案

  1. 减少并行编译任务:
    make -j2
  2. 创建交换空间:
    sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile

8. 性能测试与验证

8.1 基本功能验证

连接数据库并执行简单查询:

/opt/pgsql/18/bin/psql -U postgres -d postgres -c "SELECT version();"

8.2 pgbench基准测试

初始化测试数据库:

sudo -u postgres /opt/pgsql/18/bin/createdb pgbench sudo -u postgres /opt/pgsql/18/bin/pgbench -i -s 100 pgbench

执行测试:

sudo -u postgres /opt/pgsql/18/bin/pgbench -c 10 -j 2 -t 1000 pgbench

参数说明

  • -s 100:创建100倍标准大小的测试数据
  • -c 10:10个并发客户端
  • -j 2:使用2个工作线程
  • -t 1000:每个客户端执行1000个事务
http://www.jsqmd.com/news/515524/

相关文章:

  • MySQL问题解决与重装指南:2002 - Can‘t connect to server on ‘localhost‘(10061) ;MySQL重新安装;Mysql连接Idea pycharm;
  • 数据结构优化:提升StructBERT模型批量文本处理效率的编程技巧
  • 嵌入式软件工程进阶:五大开源项目架构解析
  • Llava-v1.6-7b部署优化:Docker容器化方案详解
  • 比迪丽AI绘画模型STM32F103C8T6开发板部署方案
  • 2026年质量好的无尘喷漆房工厂推荐:宁波无尘喷漆房可靠供应商推荐 - 品牌宣传支持者
  • 从数学推导到5G落地:用NumPy复现LS/MMSE信道估计算法的完整指南
  • 告别官网繁琐流程!用Chocolatey在Windows 10/11上5分钟搞定ROS2 Foxy环境
  • 2026年靠谱的宁波走心机编程品牌推荐:宁波精密加工走心机源头工厂推荐 - 品牌宣传支持者
  • Apollo规划模块实战:5分钟搞定参考线平滑算法配置与调优
  • 告别logging!用loguru给FastAPI日志加彩色buff的5个实战技巧
  • 别再只会git clone了!Gitee新手必知的3种本地仓库初始化姿势(含SSH密钥配置避坑)
  • ArchLinux 下 Fcitx5 输入法的现代化部署与个性化定制指南
  • Linux RDMA网络性能优化实战指南
  • ArcoDesign实战:如何用Vue3+Arco快速搭建企业级中后台管理系统(附最佳实践)
  • Qwen3-ASR-0.6B方言识别实战:22种中文方言准确率对比
  • 手把手教你用HuggingFace API调用开源大模型(2025最新版)
  • 现代布局方案:彻底搞懂Flexbox弹性布局
  • Nunchaku-flux-1-dev图像生成实战:Python爬虫数据驱动创意灵感
  • lingbot-depth-pretrain-vitl-14实战教程:将深度图接入ROS2节点实现机器人实时感知
  • 保姆级教程:Qwen-Image-2512-ComfyUI 零基础入门,从部署到出图全流程
  • C语言实现CAN FD高负载通信:5个被90%工程师忽略的内存对齐与DMA配置陷阱
  • NumPy 函数手册:数组元素修改操作
  • OpenClaw浏览器自动化:ollama-QwQ-32B驱动的智能表单填写
  • X11vnc在中科方德V5上的避坑指南:从密码权限到防火墙设置
  • 云容笔谈·东方红颜影像生成系统Python爬虫数据驱动创作:从网络素材到定制画像
  • 手把手教程:用造相-Z-Image-Turbo亚洲美女LoRA,快速生成高质量人像
  • 科研助手:OpenClaw+Qwen3-32B自动抓取论文与摘要翻译
  • XV7021BB SPI驱动开发:嵌入式陀螺仪底层通信与工程实践
  • 2026年评价高的粉体拆包机公司推荐:全自动拆包机公司口碑哪家靠谱 - 品牌宣传支持者