Open5

コミット後のロールバック(Go)の挙動確認

Yoshiharu SuzukiYoshiharu Suzuki

Gorm V1ではエラーを返さない。
sql.ErrTxDone以外のときしかエラーを返さない実装になっている。
https://github.com/jinzhu/gorm/blob/master/main.go#L596-L598

ただ、Gormの場合は手動でロールバックするのではなく、関数オブジェクトとして渡して、ロールバックはGormに任せるのが推奨っぽいドキュメントなので、通常はやらない気がする。
https://v1.gorm.io/docs/transactions.html#Transactions

func CreateAnimals(db *gorm.DB) error {
  return db.Transaction(func(tx *gorm.DB) error {
    // do some database operations in the transaction (use 'tx' from this point, not 'db')
    if err := tx.Create(&Animal{Name: "Giraffe"}).Error; err != nil {
      // return any error will rollback
      return err
    }

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

    // return nil will commit
    return nil
  })
}
Yoshiharu SuzukiYoshiharu Suzuki

Gorm v1 はpgxは公式にサポートしていない。実行時にその旨のログがでる。

`pgx` is not officially supported, running under compatibility mode.