基于 Debian 12,源码安装 PostgreSQL 17.5

作者: Penny 分类: 未分类 发布时间: 2025-07-21 10:26

下面给你全流程,基于 Debian 12,源码安装 PostgreSQL 17.5(也可以换 16 或更高):

1. 安装编译依赖

apt update

apt install -y build-essential \

               libreadline-dev zlib1g-dev bison flex \

               gcc g++ uuid-dev libssl-dev libicu-dev \

               perl libencode-perl libicu-dev pkg-config vim net-tools

编译 PostgreSQL 必要的依赖:gcc、readline、zlib、openssl。

2. 下载源码包

去官网下载,比如 PostgreSQL 15.6 版:

mkdir -p /data/{conf,logs,svr,dbdat,build}/pgsql

cd /data/build

wget https://ftp.postgresql.org/pub/source/v17.5/postgresql-17.5.tar.gz

3. 解压

tar -xvzf postgresql-17.5.tar.gz

cd postgresql-17.5

4. 配置编译参数

./configure --prefix=/data/svr/postgresql-17.5 --with-openssl

--prefix 是安装目录,--with-openssl 支持 SSL。

5. 编译安装

make -j$(nproc)   # 并行加速编译

make install

6. 创建 PostgreSQL 用户

sudo useradd -m -U -r -s /bin/bash postgres

sudo mkdir /data/dbdat/pgsql/data -p

sudo chown postgres:postgres /data/dbdat/pgsql/data

mkdir -p /data/logs/pgsql

chown -R postgres:postgres /data/logs/pgsql

chown -R postgres:postgres /data/svr/pgsql

7. 初始化数据库

切换到 postgres 用户:

sudo su - postgres

/data/svr/pgsql/bin/initdb -D /data/dbdat/pgsql/data

8. 启动 PostgreSQL

/data/svr/pgsql/bin/pg_ctl -D /data/dbdat/pgsql/data -l logfile start

logfile 是日志输出。

9. 设置环境变量(可选)

给 postgres 用户加环境变量:

echo 'export PATH=/data/svr/pgsql/bin:$PATH' >> ~/.bash_profile

source ~/.bash_profile

10. 配置远程访问(可选)

和之前一样,改:

vim /data/dbdat/pgsql/data/postgresql.conf

把:

listen_addresses = '*'

max_parallel_workers_per_gather = 8

parallel_tuple_cost = 0.0

parallel_setup_cost = 0.0

改好,再改:

vim /data/dbdat/pgsql/data/pg_hba.conf

加:

host    all             all             0.0.0.0/0     md5

重启:

/data/svr/pgsql/bin/pg_ctl -D /data/dbdat/pgsql/data restart

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

[Unit]

Description=PostgreSQL database server

After=network.target

[Service]

Type=forking

User=postgres

Group=postgres

# 这里根据你 initdb 初始化的目录来

Environment=PGDATA=/data/dbdat/pgsql/data

ExecStart=/data/svr/pgsql/bin/pg_ctl start -D ${PGDATA} -s -l /data/logs/pgsql/postgresql.log

ExecStop=/data/svr/pgsql/bin/pg_ctl stop -D ${PGDATA} -s -m fast

ExecReload=/data/svr/pgsql/bin/pg_ctl reload -D ${PGDATA} -s

# 关闭时也自动 stop

Restart=on-failure

LimitNOFILE=65536

[Install]

WantedBy=multi-user.target

11. 设密码

psql

ALTER USER postgres WITH PASSWORD 'password';

\q

12. 开启防火墙(可选)

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

sudo firewall-cmd --reload