当前位置: 首页 > 知识库问答 >
问题:

节点 JS 应用程序中的 knex 迁移错误

谭昊乾
2023-03-14

我正在使用已知来连接我的应用程序中的 postgres。我在运行时收到以下错误

knex migrate:latest

TimeoutError: Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx) call?
    at Timeout._onTimeout 

参考一些线程,我知道我必须添加事务调用,但我是否需要添加应用程序的所有sql调用?

在留档中,它没有给我关于何时添加这个的详细信息?为什么是必须的?我的查询大多是“GET”类型,因此不确定这些查询是否需要应用事务

共有1个答案

茅炯
2023-03-14

这似乎是一个库错误,可能。

一般来说,包括SELECT在内的任何行为都需要具有读取锁定的事务。DB将根据事务隔离级别设置组织资源锁定序列,并且大多数情况下READCOMMITTED是默认的。用户读取表时,在完成操作之前,不能删除表中的行。Delete(独占锁)会一直等到Select(读取共享锁)释放它,即使我们没有提到begin事务。

因此,大多数数据库连接库都支持像这样的“自动提交”选项,如果没有进行显式事务(或由DBMS会话选项本机支持),则默认情况下会使用事务自动包装this和this,因此所有请求都在事务块上运行。

Knex似乎没有明确的这个选项。我可以发现它可能与DBMS类型不同。甲骨文方言。在阅读代码时,我发现这里有Oracle实现,但这里的Postgresql实现没有自动提交。在我看来它是不完整的。

该文档还表示,它可以在不处理调用的情况下选择查询。如果它泄漏了许多打开的会话,那么它显然是一个错误。请提交带有示例代码的错误报告以重现此问题。

或者您可以从数据库端检查挂起列表中的哪些查询。所有现代数据库系统都可以列出会话和锁定状态。我想您已经混合了原始选择调用和transaction()调用,然后原始选择调用可能会附加到未提交的打开事务中。您可以像这样通过DB管理功能查看正在发生的事情。

 类似资料:
  • 我不确定似乎是什么问题,但这种膝盖迁移失败了。尽管我是编写迁移的新手,但我坚信此迁移文件是正确的。生成的错误如下 代码如下。最初,这些迁移函数在单独的文件中,我认为它失败了,因为文件没有同步执行,这导致我编写了一个文件。我不确定这是否有帮助,但是当我删除包含外键引用(UserRoles、RolePer的、令牌)的表的代码时,其余的似乎都在工作。

  • 我的应用程序(Postgres)中有7个不同的模式,我做了两次迁移来更改列,一次影响A模式,另一次影响公共模式。我想知道这种意外行为的原因。

  • 2020-01-28T01:42:46.028688+00:00 Heroku[web.1]:使用命令启动进程 2020-01-28T01:42:45.000000+00:00APP[api]:生成成功 2020-01-28T01:42:48.451589+00:00Heroku[web.1]:状态从启动更改为崩溃 2020-01-28T01:42:48.433700+00:00 Heroku[W

  • 我有我的节点。具有依赖项的js应用程序 } 它在我的本地主机上运行良好 当我在heroku上托管我的节点应用程序时,我遇到了以下错误。 TypeError:对象#在对象上没有“randomBytes”方法。MemoryStore上的uid(/app/node_modules/express/node_modules/connect/lib/utils.js:121:17)。在对象的generate

  • 我们正在升级appservers,并将部署在WebSphere5中的所有应用程序转移到WebSphere8.5。 首先,我尝试用下的com.ibm.ws.prereq.soap.jar替换应用程序类路径中的旧soap.jar 然后,我从应用程序类路径中完全删除了soap.jar,并将com.ibm.ws.prereq.soap.jar放在目录中,但仍然出现了相同的错误。 我还在整个AppServe

  • 我似乎无法用knex迁移数据库。在up命令中,它失败。 我得到一个错误。 我发誓它昨天还在工作。我试着删除并重建数据库。运气不好。怎么了?我该如何解决这个问题? 在knex消息源中似乎没有任何明显的挖掘。