Flutter连接PostgreSQL报SocketException连接拒绝错误的解决咨询
PostgreSQL连接被拒绝(SocketException: errno=111)的原因及解决方法
以下是针对你遇到的SocketException: Connection refused (OS Error: Connection refused, errno=111)错误的排查方向和解决步骤:
1. PostgreSQL服务未启动
- 检查PostgreSQL服务状态:
- Windows:打开「服务」管理器,找到PostgreSQL相关服务,确认状态为「正在运行」,未启动则右键启动。
- macOS:终端执行
brew services list查看状态,未启动则执行brew services start postgresql。 - Linux:终端执行
sudo systemctl status postgresql查看状态,未启动则执行sudo systemctl start postgresql。
2. PostgreSQL监听地址配置错误
PostgreSQL默认可能仅监听本地socket或特定IP,需修改配置允许外部连接:
- 找到
postgresql.conf配置文件(路径参考:Windows为C:\Program Files\PostgreSQL\<版本>\data;macOS为/usr/local/var/postgres;Linux为/var/lib/postgresql/<版本>/main)。 - 打开文件,找到
listen_addresses项,修改为listen_addresses = '*'(允许所有IP访问),保存后重启PostgreSQL服务。
3. 端口不匹配或被占用
你的代码使用5432端口,但需确认PostgreSQL实际监听端口:
- 检查
postgresql.conf中的port配置,确保与代码中的5432一致,不一致则修改代码或配置文件。 - 检查端口是否被其他程序占用:
- Windows:终端执行
netstat -ano | findstr :5432,若有占用进程,关闭该进程或修改PostgreSQL端口。 - macOS/Linux:终端执行
lsof -i :5432,查看占用进程并终止,或调整PostgreSQL端口。
- Windows:终端执行
4. 防火墙/安全组拦截
防火墙可能阻止了Flutter程序访问PostgreSQL端口:
- Windows:打开Windows防火墙,添加入站规则,允许5432端口的TCP连接。
- macOS:进入「系统设置-网络-防火墙」,允许PostgreSQL通过防火墙。
- Linux:执行
sudo ufw allow 5432(若使用ufw防火墙),或对应开放端口的命令。
5. Flutter运行环境的localhost映射问题
如果在Android模拟器中运行Flutter,localhost指向模拟器自身,而非你的电脑:
- 替换代码中的
"localhost"为电脑的局域网IP(如192.168.1.100),或使用Android模拟器专用映射地址10.0.2.2;iOS模拟器可直接使用localhost。
6. PostgreSQL用户连接权限不足
即使服务正常,用户可能无权限从当前地址连接数据库:
- 登录PostgreSQL控制台:执行
psql -U postgres。 - 授予用户数据库权限:执行
GRANT ALL PRIVILEGES ON DATABASE instagram TO postgres;。 - 修改
pg_hba.conf文件,添加连接规则:
新增一行host instagram postgres 0.0.0.0/0 md5(允许所有IP通过postgres用户连接instagram数据库,密码验证),保存后重启PostgreSQL服务。
额外提示:代码中的SQL语法错误
你注释的INSERT语句存在语法错误:(Username, 'Name, Surname, Photo)中列名的单引号使用错误,正确写法应为 (Username, "Name", Surname, Photo)(若列名包含大写或特殊字符)或直接写列名(如列名全小写),避免后续连接成功后出现SQL执行错误。
内容的提问来源于stack exchange,提问作者Emir Bolat
相关产品推荐
相关产品推荐

