在 AlmaLinux 9 上安装 PostgreSQL 18
官方文档:Linux downloads (Red Hat family)
运维环境:
- 操作系统:AlmaLinux 9.7
- 数据库版本:PostgreSQL 18
dnf install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
验证仓库状态:
percona-release show
⚠️ 建议不要同时启用官方 PostgreSQL(PGDG)或 MySQL Oracle 官方仓库,避免版本冲突。
dnf -qy module disable postgresql
percona-release setup ppg-18
说明:
ppg= Percona PostgreSQL18= 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