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

使用pg-promise的Node.js脚本执行完成后挂起数秒才退出是什么原因

问题原因

pg-promise底层依赖node-postgres的连接池,默认会保持空闲连接存活10秒,用来复用连接减少下次查询的握手开销。只要连接池里还有活跃的连接句柄,Node.js事件循环就判定还有未完成的任务,不会立刻退出,直到空闲连接超时被自动释放后,脚本才会正常退出。
你补充的去掉数据库查询后脚本立刻退出,也验证了是数据库连接池持有活跃句柄导致的挂起。

解决方案

只需要在所有数据库操作完成后,手动调用pg-promise提供的end()方法关闭连接池,释放所有连接句柄即可,修改后的代码如下:

import pgpPackage from 'pg-promise';
const pgp = pgpPackage();

const env = {
  dbUrl: process.env.DB_URL
};

const app = {
  db: pgp(env.dbUrl),
};

const main = async () => {
  console.log(await app.db.any('select 1'));
  return 42;
};

try {
  const x = await main();
  console.log('all ok, main returned', x);
} catch (err) {
  console.log('an error occurred:', err);
} finally {
  // 手动关闭连接池,释放所有连接
  pgp.end();
  // 也可以用 app.db.$pool.end() 效果一致
}

修改后脚本执行完所有逻辑就会立刻退出,不会再出现10秒的挂起。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 08:15:05