在 CentOS 上 PostgreSQL 启动慢 是常见问题,通常不是 PostgreSQL 本身“慢”,而是系统环境或配置导致的。下面按常见原因 → 排查方法 → 解决办法系统说明。
PostgreSQL 启动时会尝试解析主机名(如 localhost、连接来源)。
表现
starting server...排查
hostname
getent hosts $(hostname)
解决
✅ 在 /etc/hosts 中确认本机 IP 和主机名对应:
127.0.0.1 localhost
192.168.1.10 your-hostname
✅ 或在 postgresql.conf 中:
listen_addresses = 'localhost'
CentOS 7/8 使用 systemd,若磁盘、网络未就绪会拖慢启动。
排查
systemctl status postgresql
journalctl -xe
解决
如果上次异常关闭,PostgreSQL 会重放 WAL。
排查
tail -n 50 $PGDATA/log/*.log
日志中若有:
database system was not properly shut down
performing crash recovery
✅ 正常,恢复完成后会变快
❌ 若频繁出现,说明有强制 kill / 断电
系统未正确分配 shared_buffers 或 HugePages。
排查
cat /proc/meminfo | grep Huge
解决
shared_buffers排查
iostat -x 1
df -h
解决
CentOS 默认开启 SELinux。
排查
getenforce
解决
semanage fcontext -a -t postgresql_db_t "/var/lib/pgsql(/.*)?"
restorecon -Rv /var/lib/pgsql
虽然不直接影响启动,但某些配置会触发等待。
解决
systemctl stop firewalld
例如:
✅ 建议使用官方 PGDG 源
# 1. 主机名解析
getent hosts $(hostname)
# 2. 启动日志
journalctl -u postgresql
# 3. PG 日志
tail -f $PGDATA/log/*.log
# 4. IO 状态
iostat -x 1
你可以告诉我:
我可以精准定位是哪一种原因。