sqlx 事务上下文与 Exec 上下文

时间:2021-01-22 00:08:04

标签: sql postgresql go sqlx

我使用 sqlx 和 Postgres 运行以下代码:

ctx1 := context.Background()
ctx2, cancel2 := context.WithCancel(context.Background())
ctx3, cancel3 := context.WithCancel(context.Background())

db, _ := sqlx.Connect("postgres", dataSrc)
tx, _ := db.BeginTxx(ctx1, nil)
tx.ExecContext(ctx2, someArgs...)
tx.ExecContext(ctx3, someArgs...)
cancel3() // ? Will the entire transaction fail? Do I need to rollback?

从上面的代码片段可以看出。我有 3 个不同的上下文,我取消了第三个上下文。在这种情况下,会发生什么? cancel3() 会导致整个交易失败吗?或者只是那个特定的 Exec 调用失败?我需要回滚吗?

如果我们像这样改变顺序会发生什么:

ctx1 := context.Background()
ctx2, cancel2 := context.WithCancel(context.Background())
ctx3, cancel3 := context.WithCancel(context.Background())

db, _ := sqlx.Connect("postgres", dataSrc)
tx, _ := db.BeginTxx(ctx1, nil)
tx.ExecContext(ctx2, someArgs...)
tx.ExecContext(ctx3, someArgs...)
cancel2() // cancel the 2nd one instead

我似乎找不到任何关于此的文档。

0 个答案:

没有答案
相关问题