卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章34373本站已运行393

go goose 事务什么时候提交?

go goose 事务什么时候提交?

php小编鱼仔在这里为大家解答一个常见的问题:"go goose 事务什么时候提交?"在 Go 语言中,事务的提交取决于具体的数据库驱动。一般而言,当执行事务提交的操作时,数据库会将当前事务的所有修改操作一次性提交到数据库中。这样可以确保事务的原子性,即要么全部提交成功,要么全部回滚失败。因此,事务的提交时机是在执行事务提交操作的时候,而不是在事务的开始或结束时。具体的使用方法可以参考相关的数据库驱动文档。

问题内容

  • 我有一些代码需要在 tx 中运行,如下所示
  • 我生成了一个 go sql 迁移,如 go goose 的官方文档中所述

我的问题是:

  • 这些事务什么时候真正被 commited 到数据库?
  • 我强制使用 tx.commit() 提交迁移。这是我在 go 中的迁移文件:
func Up00002(tx *sql.Tx) error {
    _, err := tx.Exec("UPDATE users SET username='admin' WHERE username='root';")
    if err != nil {
        return err
    }

    if err = tx.Commit(); err != nil {
        return fmt.Errorf("error during committing the transaction: %w", err)
    }


    return nil
}

我无法在 down 部分之后运行上述迁移,因为当我运行它们时,我得到了 errtxdone (源)。我仍然想多次运行 go 迁移 up00002 (用于测试)。我怎样才能做到这一点?我在这里做错了什么?

解决方法

因此,只需浏览他们的文档此处即可显示提交已经在 AddMigrations 调用中发生 - 这是使用 ofc 事务,由 go goose 内部处理 - 非常好:)

对于sql也是如此,正如我们所看到的这里

pkg还提供了--no-transaction选项,我们可以使用它来完全控制db对象 - 太棒了!

卓越飞翔博客
上一篇: 如何在 zap 记录器库中使用自定义时间函数
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏