Open5
コミット後のロールバック(Go)の挙動確認
サンプルコードを書いた。
標準パッケージのdatabase/sqlではErrTxDoneが返る。
database/sql経由ではなくそのままpgxを使うケースでは、pgx.ErrTxClosed
が返る。
ドキュメントとして書いてある。
Gorm V1ではエラーを返さない。
sql.ErrTxDone
以外のときしかエラーを返さない実装になっている。
ただ、Gormの場合は手動でロールバックするのではなく、関数オブジェクトとして渡して、ロールバックはGormに任せるのが推奨っぽいドキュメントなので、通常はやらない気がする。
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
})
}
Gorm v1 はpgxは公式にサポートしていない。実行時にその旨のログがでる。
`pgx` is not officially supported, running under compatibility mode.