Вставка в таблицу множества строк через подготовленный(bind) запрос
Задача: Вставить в таблицу несколько(много) строк через bind параметры вида
insert into table ( field ) values ($1)
Поиск в просторах навел на пакет pg-format, однако он уже в архиве и не поддерживается, да и обновлялся 8 лет назад
const data = [1,2,3,4,5,6,7,8,9];
Из вариантов пробовал(data - массив чисел):
const valt = data.map(i => [i]) ;
// valt = data
const query = {
text: 'insert into qqq (qqqq) VALUES ($1)',
values: valt,
rowMode: 'array' // с ним и без
};
client.query(query, (err, res) => {
...
})
Получаю ошибку, что задан 1 параметр, а передано больше(хочу вставить 1000 строк)
Пока нашел только такой вариант, это преобразование всех данных к готовому sql
const valt = data.map(i => `(${i})`).join(',')
client.query(`insert into qqq (qqqq) VALUES ${valt}`, (err, res) => {
...
})
Эта конструкция мне сильно не нравится, т.к. это не подготовленный запрос
Еще видел предложения в виде такой конструкции, но она мне кажется неоправданной по трудомощностям
client.query(
"insert into qqq( qqqq ) select * from unnest( $1::int4[] )",
[[1], [2], [3]]
)
Вопрос: Как вставить в таблицу несколько строк через подготовленный запрос?
Использую пакет pg