CentOS7虚拟机PostgreSQL执行psql -l报错:postgres数据库不存在求排查
PostgreSQL执行
psql -l报错「database « postgres » does not exist」的排查思路 1. 确认连接的实例是不是预期的那个
- 先查客户端和服务器版本:
psql -V看客户端版本,postgres -V看服务器版本,确保两者匹配,别跨版本连错实例 - 检查
PGDATA环境变量:执行echo $PGDATA,看指向的是不是你配置里的/var/lib/pgsql/11/data,要是指向别的目录,大概率连错实例了 - 看服务状态:
systemctl status postgresql-11,确认跑的是11版本的PostgreSQL
2. 先连模板库确认实例状态
PostgreSQL默认一定会有template1这个系统库,先试试连它:
psql -d template1
连进去后执行\l,直接看当前实例下所有数据库,确认是不是真的没有postgres库
3. 检查实例有没有完成初始化
- 要是刚装的PostgreSQL,可能没跑初始化命令,CentOS7上11版本的初始化命令是:
/usr/pgsql-11/bin/postgresql-11-setup initdb
- 去数据目录
/var/lib/pgsql/11/data里看看,有没有base、global这些目录,要是缺了,说明实例没初始化好
4. 真缺postgres库就手动建一个
如果确认实例正常,就是没postgres库,连进template1后执行创建命令:
CREATE DATABASE postgres;
建完退出,再跑psql -l试试
5. 检查是不是环境变量改了默认连接库
- 看看有没有设
PGDATABASE变量:echo $PGDATABASE,要是输出不是空也不是postgres,说明默认连接被改了,执行unset PGDATABASE再试 - 也可以直接指定库跑列表命令:
psql -d template1 -l
6. 验证pg_hba.conf的有效性
你给的配置看起来没问题,但还是要确认:
- 查实例实际加载的配置文件:连进template1后执行
show hba_file;,看路径和你提供的是不是一致 - 要是之前改过配置,记得重载服务:
systemctl reload postgresql-11,不然配置没生效
内容的提问来源于stack exchange,提问作者Youssef CH
相关产品推荐
相关产品推荐

