如何使用pg-promise帮助器返回插入查询结果值

Faz*_*Faz 5 postgresql node.js pg-promise

我正在使用pgp.helpers.insert将数据保存到运行良好的PostgreSQL中。但是,我需要返回值以呈现在响应中。我在用:

this.collection.one(this.collection.$config.pgp.helpers.insert(values, null, 'branch'))
Run Code Online (Sandbox Code Playgroud)

它不返回任何数据。

我想要做的是在成功插入后返回分支ID,例如:

INSERT into branch (columns) VALUES (values) RETURNING pk_branchID
Run Code Online (Sandbox Code Playgroud)

vit*_*y-t 5

只需将RETURNING...子句附加到生成的查询中:

var h = this.collection.$config.pgp.helpers;
var query = h.insert(values, null, 'branch') + 'RETURNING pk_branchID';

return this.collection.one(query);
Run Code Online (Sandbox Code Playgroud)

如果要自动生成插入,则必须在其中有一个大对象。命名空间助手在生成多行插入/更新时最有价值,在这种情况下,ColumnSet用作静态变量:

var h = this.collection.$config.pgp.helpers;
var cs = new h.ColumnSet(['col_a', 'col_b'], {table: 'branch'});
var data = [{col_a: 1, col_b: 2}, ...];

var query = h.insert(data, cs) + 'RETURNING pk_branchID';

return this.collection.many(query);
Run Code Online (Sandbox Code Playgroud)

请注意,在这种情况下,我们执行.many,因为期望返回1或更多行/结果。甚至可以将其转换为一个id-s数组:

return this.collection.map(query, [], a => a.pk_branchID);
Run Code Online (Sandbox Code Playgroud)

请参阅:Database.map