gpt4 book ai didi

postgresql - pg-promise - 使用批处理时无法收到数据库响应

转载 作者:行者123 更新时间:2023-11-29 13:13:41 26 4
gpt4 key购买 nike

当我使用 tx.batch 时,我试图从数据库中获取响应。

谢谢。

  • 1) 查询数据库以获取需要更新的预先存在的记录
  • 2) 使用 1 的结果,对 db 进行另一个批处理调用创建或更新记录
  • 3) 返回状态 200 到我的 api 并创建记录记录已更新

批处理调用确实有效,已验证的记录被插入或/和更新到数据库中。

 db.tx(t1 => {
let queryCheck = [];

reqData.forEach(obj => {
for (let key in obj) {
obj[key].resovledURLs.forEach(data => {
queryCheck.push(
t1.any(
`SELECT * FROM testDB WHERE url='${key}' AND testurl='${data}';`
)
);
});
}
});

return t1
.batch(queryCheck)
.then(data => {

return t1.tx(t2 => {
let t2QueryBatch = [];

// got rid of queryBatchOfEverything()
// uses data from t1.batch(queryCheck) to make joinedArray
let joinedArray = updateArray.concat(createArray);

joinedArray.forEach(obj => {
if (obj.queryType === "Update") {
t2QueryBatch.push(
t2.none(
`UPDATE testDB SET count = count + 1 WHERE url='${
obj.url
}' AND errorurl='${obj.testurl}';`
)
);
} else {
t2QueryBatch.push(
t2.none(
`INSERT INTO testDB (url, testurl) VALUES ('${
obj.url
}', '${obj.testurl}');`
)
);
}
});

return t2.batch(t2QueryBatch);
});
})
.then(data => {
console.log(data);
});
});

最佳答案

您的代码存在太多问题,无法就确切问题提出建议。在进行任何进一步的诊断之前,您需要彻底修改代码。

您的代码中存在立即可察觉的问题...

问题1

您忘记将 queryBatchOfEverything 链接到包含它的事务,即它应该是 return queryBatchOfEverything...,如果这是您的事务逻辑

问题2

您在 db 对象上打开一个嵌套事务,这是无效的,即您不能在另一个事务中创建独立的顶级事务。

您只能从父事务的上下文(即 t1.tx(t2 => {}))在那里创建一个子事务,也就是 savepoint

问题3

您忘记将嵌套事务的结果链接到父事务中,所以您手上又一个松散的 promise 。它需要是 return t1.tx(t2 => )

问题4

您在嵌套事务中使用方法 one,这意味着您只希望返回一行数据,而您的查询都没有返回任何内容,即您应该使用方法 none 在那里。这就是你问的问题。但是您需要修复其余部分才能使整体正常工作。

问题5

您没有将 t2.batch 链接到交易,创建另一个松散的 promise 。应该是return t2.batch

问题6

这不是问题,只是一些无用的代码:

let updateRecords = await t1.batch(queryCheck).then(data => {
return data;
});

和这个完全一样:

let updateRecords = await t1.batch(queryCheck);

关于postgresql - pg-promise - 使用批处理时无法收到数据库响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51714556/

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