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

Next.js+TypeScript连接Render Postgres数据库遇ECONNRESET错误求助

解决Render.com Postgres数据库连接ECONNRESET错误

问题场景

基于TypeScript的Next.js项目,使用pg库连接Render.com部署的Postgres数据库,执行node dist/create-table.js时抛出Error: read ECONNRESET错误。

排查与解决步骤

1. 检查Render Postgres的IP白名单配置

Render的Postgres实例默认仅允许Render内部服务访问,本地调试时需将你的公网IP加入允许列表:

  • 登录Render控制台,找到目标Postgres实例
  • 进入Settings -> IP Allowlist
  • 添加你的公网IP(可通过本地终端执行curl ifconfig.me获取)

2. 修正SSL连接配置

直接设置ssl: true可能在部分Node.js环境下触发证书验证问题,替换为更兼容的配置:
修改src/utils.ts中的客户端配置:

export async function getClient() {
  const client = new Client({
    user: "...",
    password: "...",
    database: "...",
    port: 5432,
    host: "hostname.singapore-postgres.render.com",
    ssl: {
      rejectUnauthorized: false
    }
  });
  await client.connect();
  return client;
}

注意:生产环境中若为Render内部服务连接数据库,可移除该配置,直接使用ssl: true即可。

3. 验证数据库连接参数准确性

确保user、password、database、host参数与Render控制台提供的连接字符串完全一致,避免手动输入时出现拼写错误。

4. 确保连接使用后正确释放

未关闭的数据库连接可能被Render服务端主动断开,修改createTable函数添加连接释放逻辑:

async function createTable() {
  const createUserTableQuery = `...`;
  const createTodosQuery = `...`;
  
  let client;
  try {
    client = await getClient();
    await client.query(createUserTableQuery);
    await client.query(createTodosQuery);
    console.log("Table created successfully!");
  } catch (err) {
    console.error("Error creating tables:", err);
  } finally {
    if (client) {
      await client.end(); // 执行完毕后关闭连接
    }
  }
}

5. 确认Postgres实例状态

登录Render控制台检查目标Postgres实例是否处于Live状态:

  • 免费实例长时间未使用会自动暂停,需手动点击Start恢复服务
  • 若实例处于维护或异常状态,等待Render完成恢复或联系支持团队

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:23:09