Вставка в таблицу множества строк через подготовленный(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


Ответы (0 шт):