如果使用 posgres 连接的 SQLX 的 transaction.Commit 失败

我在用


https://pkg.go.dev/github.com/jmoiron/sqlx@v1.2.0


连接到 postgres 并进行查询。如果我的 transaction.Commit 失败,我应该做 transaction.Rollback


例子


    tx, err := appState.PgConn.Beginx()

    if err != nil {

        return err

    }


    // then some queries using this tx reference

在那之后,当我们提交事务时,我们应该做..方法 1


err:= tx.Commit()

if err != nil {

    return err;

}

或者我们应该使用方法 2


err1 := tx.Commit()

if err1 != nil {

   err2:= tx.Rollback()

   if err2 !=nil {

      return err2

   }

}


MYYA
浏览 105回答 1
1回答

波斯汪

sqlx Tx 类型是一个包装器sql.Tx,该类型的文档说明:在调用 Commit 或 Rollback 之后,事务上的所有操作都会失败并返回 ErrTxDone。RollBack因此在之后调用Commit(无论成功与否)都不会产生影响(并且会返回ErrTxDone)。您可以在此处的代码中看到这一点。这意味着没有理由Rollback在已经调用之后再调用Commit(因此使用方法 1)。
打开App,查看更多内容
随时随地看视频慕课网APP