如何设置隔离级别

huangapple go评论76阅读模式
英文:

How to set isolation level

问题

我想将隔离级别设置为repeatable read。如何在使用gorm orm为postgres时实现这一目标。

示例代码:

func CreateAnimals(db *gorm.DB) error {
  tx := db.Begin()
  // 注意在事务中使用tx作为数据库句柄

  if err := tx.Create(&Animal{Name: "Giraffe"}).Error; err != nil {
     tx.Rollback()
     return err
  }

  if err := tx.Create(&Animal{Name: "Lion"}).Error; err != nil {
     tx.Rollback()
     return err
  }

  tx.Commit()
  return nil
}
英文:

I want to set isolation level to repeatable read. How do I achieve this using gorm orm for postgres.

Example code:

func CreateAnimals(db *gorm.DB) err {
  tx := db.Begin()
  // Note the use of tx as the database handle once you are within a transaction

  if err := tx.Create(&Animal{Name: "Giraffe"}).Error; err != nil {
     tx.Rollback()
     return err
  }

  if err := tx.Create(&Animal{Name: "Lion"}).Error; err != nil {
     tx.Rollback()
     return err
  }

  tx.Commit()
  return nil
}

答案1

得分: 9

我在这里遇到了完全相同的问题 这里

func GetPageAfterUpdate(dp model.DbProvider, id int, update int, page *Page) (err error) {
  tx := dp.DB().Begin()

  err = tx.Exec(`set transaction isolation level repeatable read`).Error
  if err != nil {
    tx.Rollback()
    return
  }

而且这正是使用 gorm 和 pg。

英文:

I had exactly the same problem here:

func GetPageAfterUpdate(dp model.DbProvider, id int, update int, page *Page) (err error) {
  tx := dp.DB().Begin()

  err = tx.Exec(`set transaction isolation level repeatable read`).Error
  if err != nil {
    tx.Rollback()
    return
  }

And it is exactly gorm with pg.

huangapple
  • 本文由 发表于 2015年8月6日 07:55:20
  • 转载请务必保留本文链接:https://go.coder-hub.com/31844680.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定