首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为JSON对象一起返回不同的查询与多个查询

作为JSON对象一起返回不同的查询与多个查询
EN

Stack Overflow用户
提问于 2018-12-19 12:35:04
回答 1查看 606关注 0票数 1

为了呈现一个页面,我需要运行几个无关的查询。

到目前为止,我一直在将每个查询结果转换为JSON对象,然后将它们与表单的内容一起返回:

代码语言:javascript
复制
SELECT (SELECT array_to_json(array_agg(Q1)), (SELECT array_to_json(array_agg(Q2))

...thus生成一行,每列有一个查询结果。

然而,这些查询在概念上没有任何其他共享,只是在最终应用程序之前需要在一起。此外,调用array_to_jsonarray_agg会产生一种与数据库逻辑相反的开销。

我正在考虑拆分查询,并使用pg-promisedb.batchdb.task中共享查询之间的相同连接。

与第一种方法相比,是否存在使用这种方法的注意事项?什么才是最好的表现?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-19 13:25:29

就性能而言,最好是执行多个不相关的查询,这些查询通过单个多查询字符串作为单个事务/原子块返回数据。

模块pg-承诺有专门的方法多点。如果您需要传递格式化参数,您可以像往常一样传递它们,包括这次所有查询的索引/名称,或者在灵活助手helpers.concat的帮助下,为每个查询分别提供格式化参数,以便在单个命令中生成最终的多查询字符串:

代码语言:javascript
复制
const queries = [
    {query: 'SELECT ...', values: ...},
    {query: 'SELECT ...', values: ...},
    {query: 'SELECT ...', values: ...}
    ...
];

const q = ()=> pgp.helpers.concat(queries);

db.multi(q)
    .then(([data1, data2, data3]) => {...})
    .catch(error => {...})

请注意,我们将q定义为一个函数,因此与格式相关的错误由查询方法封装,并在.catch中处理。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53851409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档