PostgreSQL 18.6 安装记录

avatar 2026年9月7日14:43:48 评论 143 次浏览

一、环境

项 值
主机 192.168.6.98
系统 CentOS Stream 9(x86_64)
SELinux Enforcing
防火墙 firewalld(active)
安装方式 PGDG 官方 yum 源
版本 PostgreSQL 18.6(18.6-1PGDG.rhel9.8)

二、目录约定

目录 用途
/usr/pgsql-18/ 二进制、库、工具(rpm 固定位置,不可自定义)
/apps/works/data 数据目录(PGDATA)
/apps/works/server 预留目录,本次为空(方案 A 二进制不落这里)

三、安装步骤(实际执行命令)

# 1. 建目录
mkdir -p /apps/works/server /apps/works/data
​
# 2. 加 PGDG 源 + 禁用系统自带 postgresql 模块 + 装 server
dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
dnf -qy module disable postgresql
dnf install -y postgresql18-server
​
# 3. 初始化数据目录(注意:直接指到 /apps/works/data,不是默认的 /var/lib/pgsql/18/data)
chown postgres:postgres /apps/works/data
su - postgres -c "/usr/pgsql-18/bin/initdb -D /apps/works/data -E UTF8 --auth-local=peer --auth-host=scram-sha-256"
​
# 4. systemd 覆盖默认数据目录
mkdir -p /etc/systemd/system/postgresql-18.service.d
printf "[Service]\nEnvironment=PGDATA=/apps/works/data\n" > /etc/systemd/system/postgresql-18.service.d/override.conf
systemctl daemon-reload

四、配置改动

postgresql.conf

/apps/works/data/postgresql.conf,只改了一处:

listen_addresses = '*'

pg_hba.conf

/apps/works/data/pg_hba.conf,末尾追加两行(对外全开,测试用):

host    all             all             0.0.0.0/0               scram-sha-256
host    all             all             ::0/0                   scram-sha-256

SELinux(关键,漏了会启动失败)

自定义数据目录默认是 default_t,必须改成 postgresql_db_t:

semanage fcontext -a -t postgresql_db_t "/apps/works/data(/.*)?"
restorecon -Rv /apps/works/data

防火墙

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

五、服务

  • systemd 单元:postgresql-18

  • 覆盖文件:/etc/systemd/system/postgresql-18.service.d/override.conf

  • 开机自启:已 enable

systemctl start postgresql-18
systemctl enable postgresql-18

六、账号

项 值
用户 postgres
密码 ugDj%sFhymtDvezf
认证方式 scram-sha-256

连接:psql -h 192.168.6.98 -U postgres -d postgres

七、验证结果

# 监听
ss -lntp | grep 5432
# 0.0.0.0:5432 和 [::]:5432 都在监听
​
# 走 TCP + scram 认证实测
PGPASSWORD='ugDj%sFhymtDvezf' /usr/pgsql-18/bin/psql -h 192.168.6.98 -U postgres -Atc "SELECT version();"
# PostgreSQL 18.6 on x86_64-pc-linux-gnu ...

八、排查要点

服务/状态

systemctl status postgresql-18
ss -lntp | grep 5432
ps -ef | grep 'postgres -D'

日志

  • 默认日志走 stderr,被 systemd 接住:

    journalctl -u postgresql-18 -f

数据目录里就是配置本体

  • postgresql.conf、pg_hba.conf、PG_VERSION 都在 /apps/works/data/

  • 改完配置要重载或重启:systemctl reload postgresql-18(部分参数要 restart)

几个容易踩的坑

  1. 数据目录是 /apps/works/data,靠的是 systemd override 改的 PGDATA。如果删了 /etc/systemd/system/postgresql-18.service.d/override.conf 再 daemon-reload,服务会回到默认 /var/lib/pgsql/18/data,表现为"起不来的库"或空库。

  2. SELinux 是 Enforcing。以后如果重建/搬数据目录到新路径,得重新跑 semanage fcontext + restorecon,否则 postgres 进程读不了数据文件,journalctl 里是 Permission denied。

  3. 密码带特殊字符(% #),shell 里写 psql 命令要用单引号包住或走环境变量 PGPASSWORD,别直接裸写。

  4. 版本升级不能靠直接替换数据目录,18 的目录只能用 18 读。跨大版本要 pg_upgrade。

  5. 对外是 0.0.0.0/0 全开,测试没问题,上生产前要收窄网段。

九、常用命令速查

# 以 postgres 身份进库(本地 peer 免密)
su - postgres -c psql
​
# 改密码
su - postgres -c "psql -c \"ALTER USER postgres PASSWORD '新密码';\""
​
# 备份(pg_dump 单库)
su - postgres -c "/usr/pgsql-18/bin/pg_dump -Fc -f /tmp/db.dump 库名"
​
# 重启/重载
systemctl restart postgresql-18
systemctl reload postgresql-18
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: