注意:这主要是关于 pg
或 Node-PostgreSQL 模块的问题。它有来自 Gatsby 和 Postgraphile 的详细信息,但我不需要这三个方面的专业知识,只需要 pg
。
我有一个数据库,可以很好地与使用 PostGraphile 的 Express 服务器配合使用。我也可以在命令行中通过 node
来访问它...
const { Pool } = require("pg");
const pool = new Pool({ connectionString: myDbUrl });
pool.connect().then(() => console.log('connected'));
// logs 'connected' immediately
完全相同的数据库也以前通过 gatsby-source-pg
插件与 Gatsby/PostGraphile 配合得很好......但是最近我更换了开发机器,当我尝试构建或运行开发服务器时,Gatsby 卡在“源和转换 Node ”步骤上。当我调试它时,它卡在对 pool.connect()
的调用上。
所以我确实有两个使用 PostGraphile 的代码库,都具有相同的配置,一个有效,另一个无效。更奇怪的是,如果我在 node_modules
中编辑 Gatsby 插件的源代码,使其使用 完全相同的代码(我可以在命令行成功运行) ...它仍然挂起。
我唯一能想到的是,其他一些 Gatsby 插件正在使用所有连接并且没有释放它们,但据我所知(例如,通过 node_modules 进行 grep-ing
) 甚至没有其他插件使用 pg
。
所以我真的有两个问题:
A) 谁能帮我理解为什么 connect
会挂起?如果您能帮助我理解为什么它会在 Gatsby 内部使用已知良好的配置并且仅(在某些环境因素发生变化之后)这样做,那么奖励积分?
B) 谁能帮我解决它?如果可能是某种“以前的代码忘记释放连接”问题,有什么方法可以测试吗?如果我能以某种方式记录 new Pool().areYouBroken()
,那将非常有用。
最佳答案
试试:
npm install pg@latest
这就是让我的池/连接按预期开始工作的原因。
关于node.js - PG(Node-Postgres)池在 Connect 上挂起……但仅在 Gatsby 内部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63211544/