javascript - 尝试运行种子时出错:Knex:获取连接超时。游泳池可能已满
问题描述
每次运行时都会出现此错误yarn knex seed:run
:
执行“/home/user/path-to-the-file/my-seed.js”种子时出错:Knex:获取连接超时。游泳池可能已经满了。你错过了一个 .transacting(trx) 电话吗?
问题是我将项目发送给其他人并且他们可以正常运行它,我已经尝试了互联网上所有关于它的答案,我不知道该怎么办了。
我的数据库配置:
const config = Object.freeze({
client: 'pg',
pool: {
min: 0,
max: 5,
idleTimeoutMillis: 30000,
createTimeoutMillis: 3000,
acquireTimeoutMillis: 30000,
reapIntervalMillis: 1000,
createRetryIntervalMillis: 100,
propagateCreateError: false
},
connection: Object.freeze({
...database
})
})
- Knex 版本:“^0.95.8”
- pg 版本:“^8.7.1”
- 纱线版本:1.22.11
- 节点版本:14.17.4
我已经尝试降级 pg 和 node,它没有工作,没有任何工作。
Knex存储库上有一个问题,说升级到最新pg
可以解决它,但它也没有工作:https ://github.com/knex/knex/issues/2820
有人能帮我吗?
解决方案
创建此错误的一种简单方法是执行以下操作:
const rows = [];
for (let i = 0; i < 10000; i++) {
rows.push({ name : `foo ${i}` });
}
await Promise.all(rows.map(data => knex('user').insert(data)));
有无数种方法可以耗尽连接,但最常见的情况是打开太多并发事务或运行大量并行查询。
找出它发生原因的最好方法是删除部分有问题的代码,直到错误不再发生,然后调查为什么减少的测试用例会失败。
查看 knex 在内部做什么的一种好方法是DEBUG=knex:*
在运行代码之前设置环境变量,以便 knex 在代码执行时输出有关查询、事务和池连接的信息。
推荐阅读
- c++ - 如何仅使用双向分支找到最大数字
- android - 我们可以将表情符号从键盘显示到线性布局吗?
- unity3d - 某些设备无法加入 Photon PUN 中的房间。似乎无法找出原因?
- api - 在 react-native 上使用令牌访问(发送令牌作为参数)获取 api
- ios - 如何从 NEVPNManager IKEv2 获取连接失败的原因?
- angular - 如果路由解析器服务的类型为 void,则不会加载 http 请求
- javascript - 从状态数组获取特定值时未定义 - React Native
- css - Button Class 得到的不是 div 的全长?
- c++ - 这是什么''(常量向量
> &A)" 段代码是什么意思? - unity3d - Unity3d:如何从 HTTP 接收输入