连接失败需分三层排查:网络通路(如telnet测端口、检查listen_addresses和pg_hba.conf)、认证授权(如用户host粒度、密码特殊字符、scram-sha-256兼容性)、元数据权限(如GRANT pg_read_all_data)及驱动版本匹配。

连接失败不是单一问题,而是三层链路中任一环节断开的结果:网络通路、驱动加载、服务端认证/授权。先看报错关键词,再锁定位点,比盲目重装高效得多。
看到“Connection refused”或超时,先查网络和端口
这类错误说明 DBeaver 根本没摸到数据库的边,问题在最外层。
- 用
telnet host port或nc -zv host port直接测端口连通性,别信 ping —— PostgreSQL 默认不响应 ICMP - 确认 PostgreSQL 是否监听外部地址:检查
postgresql.conf中的listen_addresses,不能只写localhost;若连远程库,得是'0.0.0.0'或具体 IP - 检查
pg_hba.conf有没有放行你的来源 IP 和认证方式,例如:host all all 192.168.1.0/24 md5 - 云环境(如阿里云 RDS、腾讯云 CDB)必须额外检查安全组规则,开放对应端口(默认
5432)
报“Authentication failed”,重点核对用户+主机+密码组合
TCP 已通,但数据库服务端拒绝了登录请求。这不是密码输错了那么简单。
- PostgreSQL 的用户是
user@host粒度的,'myuser'@'localhost'和'myuser'@'127.0.0.1'是两个不同账号,前者走 Unix socket,后者走 TCP —— DBeaver 总是走 TCP,所以填localhost可能失败,换成127.0.0.1再试 - 密码里有
$、!、@等特殊字符?DBeaver UI 有时会意外截断或转义,建议先用psql "host=127.0.0.1 user=myuser dbname=mydb"命令行验证 - 检查
pg_hba.conf中该用户的认证方法是否匹配,比如配置了scram-sha-256,但客户端驱动太旧不支持,就会静默拒登
能连上但导航树空、查不了 pg_tables,大概率是权限或元数据访问问题
这时候连接已建立,DBeaver 甚至可能显示“测试成功”,但后续元数据查询被拒,属于会话级授权失败。
- DBeaver 启动后默认执行
SELECT * FROM pg_catalog.pg_tables等系统表查询来渲染左侧树,如果用户没USAGE权限进pg_catalog或publicschema,就会卡住或报“权限不足” - 快速验证:在 SQL 编辑器里手动运行
SELECT COUNT(*) FROM pg_catalog.pg_tables;,如果报错,说明权限不够;给用户加权限:GRANT USAGE ON SCHEMA pg_catalog TO myuser; - PostgreSQL 14+ 推荐直接授
pg_read_all_data角色,它覆盖了大部分系统视图读取需求:GRANT pg_read_all_data TO myuser;
驱动报 No suitable driver 或协议错误,优先换 JDBC 驱动版本
DBeaver 自带的驱动不一定适配你连的 PostgreSQL 版本,尤其连 15/16/17 时,老驱动会直接跪。
- 不要依赖 DBeaver 自动下载的驱动 —— 它常缓存旧版。去 https://www.php.cn/link/4e1a1e9a9a0a0802ec1f2677960759a9 下最新
postgresql-*.jar(如postgresql-42.7.3.jar) - 在连接编辑页 → “驱动设置” → “编辑驱动设置” → “添加文件”,删掉旧 jar,换新 jar
- 确认驱动类名是
org.postgresql.Driver,URL 模板是jdbc:postgresql://{host}:{port}/{database},别被自动填充的旧模板带偏 - JDK 17+ 用户注意:某些环境下 IPv6 优先导致连接异常,可在
dbeaver.ini末尾加-Djava.net.preferIPv4Stack=true
真正卡住人的,往往不是“连不上”,而是“连上了却看不见东西”——那多半是权限没铺到元数据层,或者驱动和服务器版本咬合不上。盯住报错原文里的第一个关键词,顺着它往底层扒一层,比反复点“测试连接”有用得多。











