【问题标题】:Bulk Insert Error using Knex.js: bind message supplies X parameters, but prepared statement "" requires Y使用 Knex.js 批量插入错误:绑定消息提供 X 参数,但准备好的语句“”需要 Y
【发布时间】:2020-05-29 17:14:19
【问题描述】:

使用 Knex.js 对 PostgreSQL 11.2 进行大型 INSERT 时,

await knex(myTable).insert(largeArray);

我们得到错误

bind message 提供 47078 个参数,但prepared statement "" 需要 9353190

问题:有没有办法在不使用绑定的情况下在 Knex.js 中进行大插入?或者 PostgreSQL 中是否有我们可以更改的参数以允许像这样的大型插入?

我相信我已经使用 Sequelize.js ORM 执行类似大小的插入(大小的 1/2)而没有此类错误,但我不希望将 ORM 用于我们当前的目的。

使用 knex 0.20.9、Node.js 12.14.1、PostgreSQL 11.2、TimescaleDB 1.6.0、Ubuntu 18.04.3

【问题讨论】:

    标签: javascript node.js database postgresql knex.js


    【解决方案1】:

    您需要批量添加数据。在 knex 中有一个名为 batchInsert() 的实用程序函数可以帮助完成它。数据库的语句大小/绑定数量有限。 Sequelize 可能会在内部进行批处理,因为它无法覆盖数据库服务器的限制。

    如果您不想使用 ORM,您可以尝试objection.js,它更像是 knex 之上的高级助手库,用于处理常用的东西,而不是真正的 ORM。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-23
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      • 2013-08-09
      • 2017-05-14
      • 2021-08-01
      • 2020-06-24
      相关资源
      最近更新 更多