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

使用Npgsql连接Heroku PostgreSQL时连接字符串主机名被替换为公网IP

问题描述

正在尝试使用npgsql NuGet包连接Heroku PostgreSQL实例,遇到了连接字符串相关问题:主机名被自动替换为本地设备的公网IP(见下方截图)。调用NpgsqlConnection的Open()方法时会抛出主机不存在的异常,而连接字符串中指定的其余参数(用户名、密码、目标数据库)均可被正确识别。
服务器主机名被替换为公网IP截图
已尝试将参数名host替换为Host、Server、server,问题没有得到解决。数据库运行状态正常,使用相同的连接信息可通过DataGrip正常连接该数据库。

可行解决方案

  • 调用Open()方法前先打印NpgsqlConnection.ConnectionString的输出,确认Host参数值和预期一致,排除上层配置读取、字符串拼接逻辑错误的可能性。
  • 优先使用NpgsqlConnectionStringBuilder构造连接字符串,规避手动拼接的格式错误、不可见字符问题,Heroku PostgreSQL强制要求SSL连接,必须显式配置SSL相关参数,示例代码如下:
var connBuilder = new NpgsqlConnectionStringBuilder
{
    Host = "你的Heroku PostgreSQL主机地址",
    Port = 5432,
    Username = "数据库用户名",
    Password = "数据库密码",
    Database = "目标数据库名",
    SslMode = SslMode.Require,
    TrustServerCertificate = true
};
using var conn = new NpgsqlConnection(connBuilder.ConnectionString);
conn.Open();
  • 排查本地全局代理设置:若设备开启了全局代理,可临时将Heroku PostgreSQL主机地址加入代理忽略列表,Windows可在命令行执行set NO_PROXY=你的Heroku PostgreSQL主机地址后再启动程序,Linux/macOS执行export NO_PROXY=你的Heroku PostgreSQL主机地址。
  • 升级npgsql版本:若使用的是5.0以下的旧版本npgsql,升级到最新稳定版即可解决旧版本存在的特殊域名解析异常已知bug。
  • 刷新本地DNS缓存:Windows执行ipconfig /flushdns,Linux/macOS执行对应DNS缓存刷新命令后重试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:15:05