[英]How do I prevent a mySQL transaction from being executed concurrently in Node.js Express?
[英]Node Postgresql How to Prevent Transaction from Aborting
我正在使用pg / transaction處理一個復雜的過程。 可以這樣簡化:
async() => {
const client = await new Pool().connect();
try {
await client.query("BEGIN");
await client query("query 1");
try {
await client query("query 2");
// Some error happen
} catch(err) {
console.log(err);
}
await client query("query 3");
await client query("COMMIT");
} catch(err) {
await client.query("ROLLBACK");
} finally {
client.release
}
}
問題是,當query2返回錯誤時,即使我不回滾該進程,客戶端也無法執行query3。 它返回的錯誤是current transaction is aborted, commands ignored until end of transction block
。 有什么方法可以防止發生查詢錯誤時交易中止?
這是默認行為,因為它是事務的重點。 如果您不希望查詢1,2,3全部成功或全部失敗,那么您可能不希望它們在同一事務中進行。
但是,如果您想要的實際上是“ 1和(2或3)”,則應該在查詢1之后放置一個SAVEPOINT
,並在查詢2錯誤時回滾到該保存點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.