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

Posted

技术标签:

【中文标题】如何使用 pg-promise 帮助器返回插入查询结果值【英文标题】:How to return insert query result values using pg-promise helpers 【发布时间】:2017-06-16 18:47:00 【问题描述】:

我正在使用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】:

只需将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-s 数组:

return this.collection.map(query, [], a => a.pk_branchID);

见:Database.map

【讨论】:

谢谢。最初,我将 SQL 放在一个文件中,但我想使用这种方式来满足请求中可能缺少的可能为 null 的列值。

以上是关于如何使用 pg-promise 帮助器返回插入查询结果值的主要内容,如果未能解决你的问题,请参考以下文章

pg-promise:在事务中的下一个查询中使用一个查询的结果

如何使用nodejs pg-promise库将带有uuid数组的记录插入pg表

Pg-promise插入/事务在异步队列中不起作用

pg-promise 将整数作为字符串返回

如何使用pg-promise同时从多个查询中获得结果?

使用 pg-promise 插入多条记录