使用 Knex.js 时批量插入错误:绑定消息提供 X 参数,但预准备语句" "需要 Y



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

await knex(myTable).insert(largeArray);

我们收到错误

绑定消息提供 47078 个参数,但预准备语句 " 需要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

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

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

相关内容

最新更新