我正在编写一个 Go 应用程序,它应该将文件中的数千个值插入到数据库中。这工作正常,只要所有值都可以插入到数据库中。如果其中一个查询失败,则之后的所有查询都会失败,因为pq: : current transaction is aborted, commands ignored until end of transaction block
我想插入所有元素,如果一个元素的插入失败,应该跳过它并插入其他元素。
我的代码:
func (db *Database) Insert(values []Value) (transerr error) {
tx, err := db.Begin()
if transerr != nil {
return nil, err
}
defer func() {
if err != nil {
tx.Rollback()
} else {
tx.Commit()
}
}
stmt, err := tx.Prepare("INSERT INTO foo VALUES (?)")
if err != nil {
return err
}
defer stmt.Close()
for _, value : range values {
_, err = stmt.Exec(value)
if err != nil {
log.Error(err)
}
}
return nil
}
我试图添加一个 tx.Rollback() 以防 stmt.Exec 失败——但这会导致sql: statement is closed.
斯蒂芬大帝
翻过高山走不出你
相关分类