gpt4 book ai didi

javascript - 从 postgres 数据库中获取 Node js 中的多个 Refcursor(使用 pg-promise)

转载 作者:行者123 更新时间:2023-11-29 14:03:21 24 4
gpt4 key购买 nike

我需要从 Nodejs 中的 pg 函数中获取多个游标。

两种PG中函数的写法我都试过了,如下链接: http://www.sqlines.com/postgresql/how-to/return_result_set_from_stored_procedure

在 PG 管理中|||查询工具我可以通过给出它的名称来查看多个游标的输出。 我想从 Node js 应用程序中获取相同的内容,我正在使用“pg-promise”。

选项-1

 db.func('get_data',
[
name,
key
])
.then(dbResult => {
console.log(" RES 1" + dbResult);
}).catch(error => {
console.log(error);
throw error;
});

选项-2

var retCursor1 = {};
var retCursor2 = {};
db.func('get_data',
[
name,
key,
retCursor1,
retCursor2,
])
.then(dbResult => {
console.log(" RES 1" + dbResult);
console.log(" RES 2" + retCursor1);
console.log(" RES 3" + retCursor2);
}).catch(error => {
console.log(error);
throw error;
});

get_data PG 函数将返回 2 个 refCursors。

但是运气不好,有人可以建议在 Node js 中获取多个游标的最佳方法是什么。

最佳答案

来自 pg-promise 的作者.


不幸的是,底层驱动程序 node-postgres 不支持 FETCH 查询。

他们建议为其使用单独的模块 - node-pg-cursor ,我试过了,但不能使它适用于你的情况,请参阅我打开的问题:https://github.com/brianc/node-pg-cursor/issues/34

我的建议是尝试完全避免它,不从函数返回任何游标,或者至少不返回您想直接从 Node.js 调用的游标。

如果您考虑性能和效率,那么最好的方法是通过方法 multi 在单个命令中执行多个 SELECT 查询, 添加于 pg-promise v7.0.0:

db.multi('SELECT * FROM users WHERE name LIKE ${user.name};' +
'SELECT * FROM products WHERE price BETWEEN ${price.min} AND ${price.max}', {
user: {name: 'John'},
price: {min: 1, max: 5}
})
.then(data => {
// data[0] = users
// data[1] = products
})
.catch(error => {

});

它将与使用两个游标的函数一样快,而且更简单。

关于javascript - 从 postgres 数据库中获取 Node js 中的多个 Refcursor(使用 pg-promise),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44084731/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com