我知道如何分别使用松鼠和事务,但我不知道如何一起使用它们。我应该什么时候回滚或提交?我的尝试是正确的还是错误的?如果不是,我错在哪里……
tx, err := db.repo.GetDatabase().Begin()
if err != nil {
return nil, err
}
sb := squirrel.StatementBuilder.
Insert("dependencies").
Columns("correlation_id", "name", "age").
PlaceholderFormat(squirrel.Dollar).
RunWith(db.repo.GetDatabase())
for _, human:= range humans{
sb = sb.Values(
human.CorrelationID,
human.Name,
human.Age,
)
}
_, err = sb.Exec()
if err != nil {
if err := tx.Rollback(); err != nil {
return nil, err
}
}
if err := tx.Commit(); err != nil {
return nil, err
}
据我所知,我正在尝试在PostgreSQL中执行查询后回滚或提交
1条答案
按热度按时间vm0i2vca1#
你的努力是伟大的。但是
....RunWith(db.repo.GetDatabase())
在这种情况下是不正确的。因为您应该传递事务连接tx
。指示Squirrel使用事务对象作为查询的数据库连接。如果使用DB连接而不是事务连接,则Squirrel查询将不是事务的一部分。每个查询将单独执行并立即提交到数据库。
我们还可以用
defer
语句更新RollBack
和Commit
,这将确保交易在函数退出之前得到正确处理和完成。这里是更新的代码。
希望这能帮上忙。
也见