tsql - 是否可以在一次交易中调用Go函数?

标签 tsql go transactions

我在PostgreSQL中存储了一个双链表。我有一个Go API来管理此列表。

有一个函数可以创建新的Node(在特定位置)。假设其中有一个INSERT SQL查询。

另外,还有一个删除Node(按ID)的函数。假设其中有一个DELETE SQL查询。

众所周知,如果需要将Node移动到其他位置,则应调用DeleteNode()函数和CreateNode()函数。所以有第三个函数叫做MoveNode()

func MoveNode() error {
  if err := DeleteNode(); err != nil {
    return err
  }
  if err := CreateNode(); err != nil {
    return err
  }
  return nil
}

但是,这些功能(位于MoveNode()内部)应该在一个事务中调用。

是否可以在Go中“合并”功能?或解决此问题的方法是什么(将代码从2个功能复制并粘贴到第三个功能之外)?

p.s这个想法很简单:您有两个函数来执行一些SQL查询,并且您需要在一个事务中执行这些查询(或在一个事务中调用2个函数)

最佳答案

进行此操作的更好方法是将tx.Commit()移至查询执行函数之外(此处为DeleteNode()和CreateNode())

建议的解决方案:

func MoveNode() error {
   tx, err := db.Begin()
   // err handling

  res, err := DeleteNode(tx)
  // err handling

  res, err := CreateNode(tx)
  // err handling

  tx.Commit()
}

func DeleteNode(transactionFromDbBegin) (responseFromExec, errorFromExec) {
    //...
}

func CreateNode(transactionFromDbBegin) (responseFromExec, errorFromExec) {
    //...
}

这应该可以解决问题。

关于tsql - 是否可以在一次交易中调用Go函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60263824/

相关文章:

sql - 根据此表和另一表中的行值删除一个表中的行

sql - 将执行动态查询的结果插入表中

sql - sql server存储过程中的多个表类型参数

go - 在分配时解包 slice ?

jquery - 使用类选择器使用Goquery解析HTML时,我在做错什么?

java - Hibernate异常: saveOrUpdate is not valid without active transaction

sql - 表的每一行都有sql语句。我如何按顺序运行每个?

go - 无法从 GoLand 运行 go 测试(Intellij Idea): compilation failed

c# - MySQL 中的事务 - 无法回滚

c# - 使用 IDbConnection/IDbTransaction 安全吗?