我使用 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
我似乎找不到任何关于此的文档。