Flutter连接PostgreSQL遇连接拒绝错误,请求解决方案
Flutter连接PostgreSQL出现Connection refused的解决办法
问题代码
import 'package:postgres/postgres.dart'; void main() async { final conn = PostgreSQLConnection( 'localhost', 5432, 'trackerapp', username: 'jax', password: '', ); await conn.open(); print('succes'); // query await conn.close(); print('connection close'); }
报错信息
E/flutter ( 7000): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: SocketException: Connection refused (OS Error: Connection refused, errno = 111), address = localhost, port = 49389 E/flutter ( 7000): #0 _NativeSocket.startConnect (dart:io-patch/socket_patch.dart:694:35) E/flutter ( 7000): #1 _NativeSocket.connect (dart:io-patch/socket_patch.dart:960:12) E/flutter ( 7000): #2 _RawSocket.connect (dart:io-patch/socket_patch.dart:1843:26) E/flutter ( 7000): #3 RawSocket.connect (dart:io-patch/socket_patch.dart:21:23) E/flutter ( 7000): #4 Socket._connect (dart:io-patch/socket_patch.dart:2068:22) E/flutter ( 7000): #5 Socket.connect (dart:io/socket.dart:747:21) E/flutter ( 7000): #6 PostgreSQLConnection.open (package:postgres/src/connection.dart:189:32) E/flutter ( 7000): #7 main (package:app1/main.dart:12:14) E/flutter ( 7000): #8 _runMain.<anonymous closure> (dart:ui/hooks.dart:131:23) E/flutter ( 7000): #9 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:297:19) E/flutter ( 7000): #10 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:192:26)
解决步骤
确认PostgreSQL服务正在运行
- Linux:执行
sudo systemctl status postgresql查看状态,未运行则用sudo systemctl start postgresql启动 - Windows:打开服务管理器(services.msc),找到PostgreSQL服务,确保状态为“正在运行”
- Mac:执行
brew services list查看,未运行则用brew services start postgresql启动
- Linux:执行
替换localhost为适配模拟器/真机的地址
- Android模拟器:将
'localhost'改为'10.0.2.2'(模拟器专属回环地址,映射宿主机的localhost) - iOS模拟器:可直接用
'localhost',但真机需替换为宿主机的局域网IP(如192.168.1.100) - 修改后的连接示例:
final conn = PostgreSQLConnection( '10.0.2.2', 5432, 'trackerapp', username: 'jax', password: '', );
- Android模拟器:将
修改PostgreSQL监听配置
- 找到
postgresql.conf配置文件(路径:Linux/var/lib/postgresql/<版本>/main/,WindowsC:\Program Files\PostgreSQL\<版本>\data\,Mac/usr/local/var/postgres/) - 修改
listen_addresses = '*'(允许所有IP访问,开发环境适用) - 重启PostgreSQL服务使配置生效
- 找到
配置pg_hba.conf开放访问权限
- 打开同目录下的
pg_hba.conf文件 - 添加访问规则,例如允许用户
jax从任意IP连接数据库trackerapp:
本地开发也可简化为:host trackerapp jax 0.0.0.0/0 scram-sha-256host trackerapp jax 127.0.0.1/32 trust - 重启PostgreSQL服务
- 打开同目录下的
检查防火墙设置
- Linux:执行
sudo ufw allow 5432开放5432端口 - Windows:在Windows Defender防火墙中添加入站规则,允许PostgreSQL服务或5432端口的连接
- Mac:在系统设置-网络-防火墙中,允许PostgreSQL的网络访问
- Linux:执行
内容的提问来源于stack exchange,提问作者Janarbek Keneshbekov
相关产品推荐
相关产品推荐

