使用 Knex.js 的批量插入错误:绑定消息提供 X 参数,但准备语句“”需要 Y
Bulk Insert Error using Knex.js: bind message supplies X parameters, but prepared statement "" requires Y
当使用 Knex.js 对 PostgreSQL 11.2 执行大型 INSERT 时,
await knex(myTable).insert(largeArray);
我们收到错误
bind message supplies 47078 parameters, but prepared statement "" requires 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。
当使用 Knex.js 对 PostgreSQL 11.2 执行大型 INSERT 时,
await knex(myTable).insert(largeArray);
我们收到错误
bind message supplies 47078 parameters, but prepared statement "" requires 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。