温馨提示×

如何编译debian postgresql源码

小樊
51
2026-10-02 12:01:54
栏目: 云计算

下面以从源码编译 PostgreSQL(在 Debian / Ubuntu 上)为例,给你一个完整、实用、可复现的流程。以 PostgreSQL 16 为例(其他大版本基本同理)。


一、准备编译环境(Debian)

1. 安装编译依赖

sudo apt update
sudo apt install -y \
  build-essential \
  libreadline-dev \
  zlib1g-dev \
  libicu-dev \
  libssl-dev \
  libxml2-dev \
  libxslt1-dev \
  pkg-config \
  bison \
  flex \
  wget

可选但常用:

  • systemd 支持:无需额外包
  • 调试版本:--enable-debug --enable-cassert

二、下载 PostgreSQL 源码

官方源码(推荐)

cd /usr/local/src
sudo wget https://ftp.postgresql.org/pub/source/v16.3/postgresql-16.3.tar.gz
sudo tar xf postgresql-16.3.tar.gz
cd postgresql-16.3

(版本号可自行替换)


三、配置编译选项(configure)

基本配置

./configure \
  --prefix=/usr/local/pgsql \
  --with-openssl \
  --with-zlib \
  --with-icu \
  --with-libxml \
  --with-libxslt

常用可选参数

参数 说明
--enable-debug 调试符号
--enable-cassert 断言检查(开发用)
--with-systemd 支持 systemd
--without-readline 无交互历史

四、编译并安装

make -j$(nproc)
sudo make install

安装后:

  • 二进制:/usr/local/pgsql/bin
  • 数据目录(需自行初始化)

五、创建 PostgreSQL 用户与数据目录

sudo useradd -m -s /bin/bash postgres
sudo mkdir -p /usr/local/pgsql/data
sudo chown -R postgres:postgres /usr/local/pgsql

六、初始化数据库

sudo -u postgres /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

七、启动 PostgreSQL

sudo -u postgres /usr/local/pgsql/bin/pg_ctl \
  -D /usr/local/pgsql/data -l logfile start

检查:

/usr/local/pgsql/bin/psql -U postgres

八、(可选)配置 systemd 服务

创建:

sudo nano /etc/systemd/system/postgresql.service

示例:

[Unit]
Description=PostgreSQL database server
After=network.target

[Service]
Type=forking
User=postgres
ExecStart=/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data start
ExecStop=/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data stop
Restart=on-failure

[Install]
WantedBy=multi-user.target

启用:

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

九、常见问题

1. 找不到 configure

autoconf

2. Debian 自带 PG 冲突?

  • 使用 --prefix 隔离
  • 不要覆盖 /usr/bin/psql

3. 想编译 Debian 官方包?

apt source postgresql-16
cd postgresql-16-*
dpkg-buildpackage -us -uc

十、总结流程

安装依赖 → 下载源码 → configure → make → make install
→ 建用户 → initdb → 启动

如果你愿意,我可以:

  • 帮你编译指定版本
  • 给你 Docker 编译方案
  • 对比 源码 vs apt 安装
  • 教你 打 patch / 二次开发 PG

直接告诉我你的使用场景即可。

0 踩