Ошибка массовой вставки с использованием Knex. js: в сообщении связывания указаны X параметров, но для подготовленного оператора "" требуется Y - PullRequest
0 голосов
/ 14 февраля 2020

При использовании 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

1 Ответ

1 голос
/ 14 февраля 2020

Вам необходимо добавить данные в пакетном режиме. В knex есть служебная функция с именем batchInsert() для помощи в этом. Базы данных имеют ограниченный размер оператора / количество привязок. Sequelize, вероятно, выполняет пакетную обработку внутри, поскольку не может переопределить ограничения, налагаемые сервером базы данных.

Если вы предпочитаете не использовать ORM, вы можете попробовать objection.js, это больше похоже на расширенную вспомогательную библиотеку поверх knex для обычных пользователей. необходимые вещи вместо реального ORM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...