INSERT ON CONFLICT DO UPDATE using pg-promise helpers for multi row insert/update
INSERT ON CONFLICT DO UPDATE using pg-promise helpers for multi row insert/update
我正在尝试使用 pg-promise 将多行插入到 pgsql 数据库中。就我而言,table 中可能已经存在我尝试插入的几条记录。在这种情况下,我需要更新它们。通过 pg-promise official documentaion, I found multiple rows can either be inserted or updated using helpers。除了多个 inserts/updates?
有没有办法像下面那样做
INSERT INTO table_name(column_list)
VALUES(value_list)
ON CONFLICT target action;
在某处创建静态变量:
const cs = new pgp.helpers.ColumnSet(['first', 'second', 'third', 'fourth'],
{table: 'my-table'});
// let's assume columns 'first' and 'second' produce conflict when exist:
const onConflict = ' ON CONFLICT(first, second) DO UPDATE SET ' +
cs.assignColumns({from: 'EXCLUDED', skip: ['first', 'second']});
- 见ColumnSet and assignColumns。
在下面的示例中,我们假设您的 data
是一个有效对象数组:
const upsert = pgp.helpers.insert(data, cs) + onConflict; // generates upsert
await db.none(upsert); // executes the query:
额外内容
如果您希望所有 SQL 生成为大写而不是小写,您可以设置选项 capSQL
:
const pgp = require('pg-promise')({
capSQL: true
});
查看生成和执行内容的最佳方式是借助 pg-monitor。
我正在尝试使用 pg-promise 将多行插入到 pgsql 数据库中。就我而言,table 中可能已经存在我尝试插入的几条记录。在这种情况下,我需要更新它们。通过 pg-promise official documentaion, I found multiple rows can either be inserted or updated using helpers。除了多个 inserts/updates?
有没有办法像下面那样做INSERT INTO table_name(column_list)
VALUES(value_list)
ON CONFLICT target action;
在某处创建静态变量:
const cs = new pgp.helpers.ColumnSet(['first', 'second', 'third', 'fourth'],
{table: 'my-table'});
// let's assume columns 'first' and 'second' produce conflict when exist:
const onConflict = ' ON CONFLICT(first, second) DO UPDATE SET ' +
cs.assignColumns({from: 'EXCLUDED', skip: ['first', 'second']});
- 见ColumnSet and assignColumns。
在下面的示例中,我们假设您的 data
是一个有效对象数组:
const upsert = pgp.helpers.insert(data, cs) + onConflict; // generates upsert
await db.none(upsert); // executes the query:
额外内容
如果您希望所有 SQL 生成为大写而不是小写,您可以设置选项 capSQL
:
const pgp = require('pg-promise')({
capSQL: true
});
查看生成和执行内容的最佳方式是借助 pg-monitor。