修复 CentOS 上的 PostgreSQL 错误,需要先定位错误类型,再对症下药。下面我按最常见的场景给你一个排查 + 修复清单,你可以对照使用。
systemctl status postgresql
或(版本不同)
systemctl status postgresql-14
常见状态:
active (running) → 服务正常failed / inactive → 服务异常journalctl -u postgresql
或查看数据目录日志(常见路径):
/var/lib/pgsql/14/data/log/
/var/lib/pgsql/data/log/
常见错误关键词:
could not connectpermission denieddata directory has wrong ownershipport already in useFATAL错误示例
data directory "/var/lib/pgsql/data" has wrong ownership
修复
chown -R postgres:postgres /var/lib/pgsql
chmod 700 /var/lib/pgsql/data
然后重启:
systemctl restart postgresql
错误示例
could not bind socket: Address already in use
检查端口
ss -lntp | grep 5432
解决方式
修改配置文件:
vim /var/lib/pgsql/14/data/postgresql.conf
port = 5433
重启:
systemctl restart postgresql
错误示例
psql: FATAL: password authentication failed for user "postgres"
修复方式
vim /var/lib/pgsql/14/data/pg_hba.conf
将:
local all all peer
改为:
local all all md5
重启:
systemctl restart postgresql
su - postgres
psql
ALTER USER postgres WITH PASSWORD 'new_password';
错误示例
database system was not properly initialized
修复
postgresql-setup initdb
或(指定版本):
/usr/pgsql-14/bin/postgresql-14-setup initdb
检查
df -h
解决
du -sh /var/lib/pgsql
排查
getenforce
如果是 Enforcing:
setenforce 0
永久关闭(不推荐生产):
vim /etc/selinux/config
SELINUX=disabled
⚠️ 会丢失数据,仅用于测试环境
systemctl stop postgresql
rm -rf /var/lib/pgsql/data
postgresql-setup initdb
systemctl start postgresql
systemctl status postgresql
journalctl -u postgresql -xe
cat /var/lib/pgsql/data/log/postgresql-*.log
你可以直接把以下信息发我:
我可以给你精确到命令级别的修复方案 ✅