gpt4 book ai didi

sql - 事务如何与 node-postgres 一起工作?

转载 作者:搜寻专家 更新时间:2023-10-31 23:18:43 24 4
gpt4 key购买 nike

我正在使用 node-postgres 以回调方式进行 SQL 查询。我有一个函数接受查询列表并在事务 block 中执行它们。我的理解是,我使用 node-postgres 提交查询“BEGIN”,在我的事务 block 中提交我需要的所有查询,然后提交查询“COMMIT”。

然而,虽然我的查询是有效的(简单的插入,经过良好测试的独立查询),并且一切都以正确的顺序执行,但当我在事务 block 之后测试数据库的状态时,我得到不一致的状态。有时我的所有插入都发生了,有时只有一部分发生了。我的理解是事务 block 是原子的,因此在提交后立即使用 SELECT 查找时, block 内的插入应该是全部或全无。

这是我的功能:

Db.prototype.makeTransaction = function (queries, callback) {
var thisDb = this;
thisDb.tryQuery("BEGIN", [], function () {
async.forEach(queries, function (query, arrayCallback) {
thisDb.tryQuery(query.sql, query.values, arrayCallback);
}, function (err) {
if (err) {
thisDb.tryQuery("ROLLBACK", [], function () {
callback(err);
});
} else {
thisDb.tryQuery("COMMIT", [], callback);
}
});
});
};

借助辅助函数 tryQuery:

Db.prototype.tryQuery = function (query, values, callback) {
pg.connect(this.conn, function (err, client) {
if (!err) {
client.query(query, values, callback);
} else {
// Failed to connect to the database
callback(err);
}
});
};

有什么问题吗?

最佳答案

感谢 araqnid 回答我的问题:事务必须在同一连接上完成。

关于sql - 事务如何与 node-postgres 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13707977/

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