远程PostgreSQL数据库连接报错Connection refused,QGIS插件连接失败求助
排查QGIS连接远程PostgreSQL/PostGIS时「Connection refused」的问题
我帮你梳理下这个连接拒绝问题的常见排查步骤,咱们一步步来定位:
第一步:先确认网络连通性
这是最基础的排查点,先排除网络层面的问题:
- 在你的客户端机器上,先ping远程服务器的IP,执行命令:
ping 你的远程服务器IP,如果ping不通,说明你的客户端和服务器之间的网络有问题(比如路由不通、服务器停机等),得先解决这个基础网络问题。 - 如果ping能通,再测试PostgreSQL默认的5432端口是否能访问,用
telnet 服务器IP 5432或者nc -zv 服务器IP 5432(如果没有nc可以先安装)。如果提示连接失败,那要么是服务器防火墙挡了端口,要么是PostgreSQL没监听这个端口。
第二步:检查PostgreSQL的核心配置
如果网络能通但端口连不上,或者端口能通但还是连不上,就要检查PostgreSQL的两个关键配置文件:
1. 修改监听地址(postgresql.conf)
PostgreSQL默认只监听localhost,也就是只能本地连接,要让它接受远程连接,需要修改listen_addresses参数:
- 找到
postgresql.conf文件(通常在/var/lib/postgresql/版本号/main/或者/etc/postgresql/版本号/main/目录下) - 找到
listen_addresses = 'localhost'这一行,改成listen_addresses = '*'(允许所有IP访问),或者指定你客户端的IP段,比如listen_addresses = '192.168.1.0/24' - 修改后重启PostgreSQL服务:
sudo systemctl restart postgresql(不同系统命令可能有差异,比如CentOS用service postgresql restart)
2. 添加访问权限规则(pg_hba.conf)
这个文件控制哪些IP可以访问数据库,必须添加允许你客户端IP的规则:
- 同样找到
pg_hba.conf文件,在末尾添加一行规则,比如:
如果是整个网段访问,就写成host all all 你的客户端IP/32 scram-sha-256你的网段/24(比如192.168.1.0/24);scram-sha-256是PostgreSQL 10+的加密方式,如果是老版本可以用md5 - 修改后同样重启服务,或者重新加载配置:
sudo systemctl reload postgresql
第三步:检查服务器端防火墙
服务器的防火墙大概率会阻止外部访问5432端口,需要手动开放:
- 如果是Ubuntu/Debian系统(用ufw防火墙):
sudo ufw allow 5432/tcp sudo ufw reload - 如果是CentOS/RHEL系统(用firewalld):
sudo firewall-cmd --add-port=5432/tcp --permanent sudo firewall-cmd --reload - 另外也要确认服务器的云服务商防火墙(比如阿里云安全组、AWS安全组)有没有开放5432端口,这个很容易被忽略!
第四步:检查QGIS的连接参数
如果前面的步骤都没问题,那就要看QGIS的设置是不是有问题:
- 确认主机/IP填写正确,不要把域名或者IP输错了
- 端口号是不是5432,如果服务器修改了默认端口,一定要填对应的端口
- 数据库名称、用户名、密码是否正确(密码错误一般会提示认证失败,但也有可能被误判为连接拒绝,最好用psql客户端先测试下)
- 检查SSL选项:如果你的PostgreSQL服务器没有开启SSL,QGIS里如果选了「Require SSL」就会连接失败,改成「Allow SSL」或者「Disable SSL」试试
额外测试:用psql客户端直接连接
在你的客户端机器上安装psql,执行命令:psql -h 服务器IP -U 数据库用户名 -d 数据库名,如果这个命令能连上,说明问题出在QGIS的插件设置上;如果连不上,那还是前面的网络、配置或者防火墙问题。
内容的提问来源于stack exchange,提问作者Candy
相关产品推荐
相关产品推荐

