You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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启动
  • 替换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: '',
      );
      
  • 修改PostgreSQL监听配置

    1. 找到postgresql.conf配置文件(路径:Linux /var/lib/postgresql/<版本>/main/,Windows C:\Program Files\PostgreSQL\<版本>\data\,Mac /usr/local/var/postgres/)
    2. 修改listen_addresses = '*'(允许所有IP访问,开发环境适用)
    3. 重启PostgreSQL服务使配置生效
  • 配置pg_hba.conf开放访问权限

    1. 打开同目录下的pg_hba.conf文件
    2. 添加访问规则,例如允许用户jax从任意IP连接数据库trackerapp:
      host    trackerapp     jax             0.0.0.0/0               scram-sha-256
      
      本地开发也可简化为:
      host    trackerapp     jax             127.0.0.1/32            trust
      
    3. 重启PostgreSQL服务
  • 检查防火墙设置

    • Linux:执行sudo ufw allow 5432开放5432端口
    • Windows:在Windows Defender防火墙中添加入站规则,允许PostgreSQL服务或5432端口的连接
    • Mac:在系统设置-网络-防火墙中,允许PostgreSQL的网络访问

内容的提问来源于stack exchange,提问作者Janarbek Keneshbekov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 06:55:27