Skip to main content
☘️ Septvean's Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

在 AlmaLinux 9 上安装 PostgreSQL 18

官方文档:Linux downloads (Red Hat family)

运维环境:

  • 操作系统:AlmaLinux 9.7
  • 数据库版本:PostgreSQL 18

准备工作

安装 Percona 官方 YUM 仓库

dnf install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm

验证仓库状态:

percona-release show

⚠️ 建议不要同时启用官方 PostgreSQL(PGDG)或 MySQL Oracle 官方仓库,避免版本冲突。


安装 Percona PostgreSQL 18

启用 PostgreSQL 18 仓库

dnf -qy module disable postgresql
percona-release setup ppg-18

说明:

  • ppg = Percona PostgreSQL
  • 18 = PostgreSQL 18(当前稳定大版本)

安装 PostgreSQL 18 及常用组件

# 如果 dnf install 速度很慢, 可以设置代理
# export http_proxy=http://127.0.0.1:1080;export https_proxy=http://127.0.0.1:1080;

dnf install -y \
    --enablerepo=crb perl-IPC-Run \
    percona-postgresql18 \
    percona-postgresql18-devel \
    percona-postgresql18-libs \
    percona-postgresql18-server \
    percona-patroni \
    percona-pg_repack18 \
    percona-pgbackrest \
    percona-pgbouncer \
    percona-pgvector_18

组件说明

包名 作用
percona-postgresql18 PostgreSQL 客户端
percona-postgresql18-server PostgreSQL 服务端
percona-postgresql18-libs 运行时库
percona-postgresql18-devel 编译扩展用
percona-pgbackrest 生产级备份工具
percona-pgbouncer 连接池

初始化数据库

# 默认数据目录
#   /var/lib/pgsql/18/data
# 修改为
#  /data/pgsql/18/data

# 创建目录并设置权限
# /var/lib/pgsql/18 目录必须创建, 否则会报错
#   /usr/pgsql-18/bin/postgresql-18-setup initdb
#   Initializing database ... touch: cannot touch '/var/lib/pgsql/18/initdb.log': No such file or directory
rm -rf /data/pgsql/18 /var/lib/pgsql/18
mkdir -p /data/pgsql/18/{backup,data} /var/lib/pgsql/18
chown -R postgres:postgres /data/pgsql/18/{backup,data}
chmod 700 /data/pgsql/18/{backup,data}

# initdb 参数
# 不要添加 --pwprompt
export PGSETUP_INITDB_OPTIONS="
--pgdata=/data/pgsql/18/data
--encoding=UTF8
--locale=C
--auth-host=scram-sha-256
--data-checksums
"

# 初始化
/usr/pgsql-18/bin/postgresql-18-setup initdb

# 进入数据目录
cd /data/pgsql/18/data

# 备份配置文件
cp pg_hba.conf pg_hba.conf_default
cp postgresql.conf postgresql.conf_default

# 修改配置文件
tee pg_hba.conf >/dev/null <<'EOF'
#TYPE   DATABASE    USER    ADDRESS         METHOD
local   all         all                     trust
host    all         all     127.0.0.1/32    trust
host    all         all     all             scram-sha-256
EOF

# 修改监听地址
sed -i "s/^#\(listen_addresses =\).*/\1 '*'/g" postgresql.conf

# 修改 systemd 参数
sed -i 's|^Environment=PGDATA=.*|Environment=PGDATA=/data/pgsql/18/data|g' /usr/lib/systemd/system/postgresql-18.service

# 重载 systemd
systemctl daemon-reload

# 启动
systemctl start postgresql-18

# 查看状态
systemctl status postgresql-18

# 查看端口
ss -netlap | grep postgres

# psql: symbol lookup error: psql: undefined symbol: PQpipelineStatus
# rpm -qa | grep -E 'postgresql.*libs|libpq'
# dnf remove libpq

# 修改密码
/usr/pgsql-18/bin/psql -d postgres -U postgres -c "ALTER USER postgres WITH PASSWORD 'KdX3V7nC';"

# 验证 PostgreSQL 版本
/usr/pgsql-18/bin/psql -d postgres -U postgres -c "SELECT version();"

# 设置开机自启
systemctl enable postgresql-18

官方仓库安装方法

# 因为 HTTP代理 的问题, 不要用 sudo, 使用 root 用户执行
su - root

# 如果 dnf install 速度很慢, 可以设置代理
# export http_proxy=http://127.0.0.1:1080;export https_proxy=http://127.0.0.1:1080;

# 添加 PostgreSQL 仓库
dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# 禁用所有 PostgreSQL 模块
sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/pgdg-redhat-all.repo

# 关闭所有 PostgreSQL 模块
dnf -qy module disable postgresql

# 安装 Perl 模块
dnf install -y --enablerepo=crb perl-IPC-Run

# 安装 PostgreSQL 18 基础包
dnf install -y --enablerepo=pgdg18 postgresql18 postgresql18-devel postgresql18-libs