如何使用pg-promise辅助工具返回插入查询结果的值

5

我正在使用 pgp.helpers.insert 将数据保存到PostgreSQL中,这个工具非常好用。但是我需要返回值并在响应中呈现。我正在使用:

this.collection.one(this.collection.$config.pgp.helpers.insert(values, null, 'branch'))

该语句未返回任何数据。

我希望能在成功插入后返回分支ID,例如:

INSERT into branch (columns) VALUES (values) RETURNING pk_branchID
1个回答

5
只需将 RETURNING...子句附加到生成的查询中即可:
var h = this.collection.$config.pgp.helpers;
var query = h.insert(values, null, 'branch') + 'RETURNING pk_branchID';

return this.collection.one(query);

如果您想自动生成插入语句,那么必须有一个大的对象。当生成多行插入/更新时,命名空间helpers非常有价值,此时用到的是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);

请注意,在这种情况下,我们使用.many,因为预计会返回1个或多个行/结果。这甚至可以转换为仅包含id的数组:
return this.collection.map(query, [], a => a.pk_branchID);

参见:Database.map


谢谢。最初,我把SQL语句放在一个文件中,但后来考虑使用这种方式来处理可能在请求中缺少的可以为null的列值。 - Faz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接