我正在使用 node-postgres 以回调样式进行 SQL 查询。我有一个函数可以接收查询列表并在事务块中执行它们。我的理解是我使用 node-postgres 提交查询“BEGIN”,在我的事务块中提交我需要的所有查询,然后提交查询“COMMIT”。
但是,尽管我的查询是有效的(简单的插入,作为独立查询经过良好测试),并且一切都肯定以正确的顺序执行,但当我在事务块之后测试数据库的状态时,我得到了不一致的状态。有时我的所有插入都发生了,有时只有其中一些发生了。我的理解是事务块是原子的,因此在提交后立即使用 SELECT 查找块中的插入应该是全部或全部。
这是我的功能:
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);
}
});
};
对出了什么问题有任何想法吗?