Я использую пул node-postgres (https://node-postgres.com/) в своем проекте.
В некоторых случаях мне нужно обработать операцию insert в цикле for, например:
data.forEach(items => {
pgPool.query('INSERT INTO cache (hash, data) VALUES($1::text, $2::json)', [key, JSON.stringify(items)])
})
Я думаю, что это не очень хороший способ вставки нескольких запросов.
Есть ли лучший способ?
Например pgPool.multipleQuery(queryArray) ?
Или мое решение правильное?
Спасибо за любую помощь.
@RobertHarvey В лучшем случае 1 и в худшем случае 50





Я не знаю, как выглядят данные, но я представляю это так:
let data = [
["item1", "item2"],
["item3", "item4"],
["item5", "item6"]
];
И я предлагаю вам использовать вставка нескольких строк в один запрос и построить запрос:
let parameters = data
.map(
(items, i) => ["($", (i * 2) + 1, "::text, $", (i * 2) + 2, "::json)"].join("")
).join(",");
//($1::text, $2::json),($3::text, $4::json),($5::text, $6::json)
let key = "hash";
let parametersValues = data
.flatMap(items => [key, JSON.stringify(items)]);
//["hash", "["item1","item2"]", "hash", "["item3","item4"]", "hash", "["item5","item6"]"]
let queryText = "INSERT INTO cache (hash, data) VALUES" + parameters;
//INSERT INTO cache (hash, data) VALUES($1::text, $2::json),($3::text, $4::json),($5::text, $6::json)
pgPool.query(queryText, parametersValues);
Сколько предметов есть?