簡體   English   中英

節點Postgresql如何防止事務中止

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM