我正在使用knex.raw在Postgres ON CONFLICT上插入行...我想插入多个行,例如batchInsert。如何链接原始报表? TypeScript界面建议您不要这样做。
我当前的实现使用了forEach + await(承诺),这显然使许多远程调用成为可能。
const data = [
{ ref : 'A', name : 'My A' },
{ ref : 'B', name : 'My B' },
{ ref : 'C', name : 'My C' }
];
await items.forEach(async (item) => {
const insert = trx.table('myTable').insert({'ref': item.ref, 'name' : item.name}).toSQL();
const onConflict = 'ON CONFLICT ON CONSTRAINT myTable_pkey DO NOTHING';
await trx.raw(`${insert.sql} ${onConflict}`, insert.bindings);
}
答案 0 :(得分:0)
不,您不能链接原始查询...每个原始查询都是一个查询。但是,您想通过链接实现哪种查询?为什么你不能做:
const insert = trx.table('myTable').insert(items).toSQL();
const onConflict = 'ON CONFLICT ON CONSTRAINT myTable_pkey DO NOTHING';
await trx.raw(`${insert.sql} ${onConflict}`, insert.bindings);