Postgresql Db delete查询始终返回true

Postgresql Db delete查询始终返回true,postgresql,go,Postgresql,Go,我在用葛兰和博士后。我想通过传入该用户的Id从表中删除该用户。当我运行下面的代码时,我总是得到正确的答案。即使我传入了一个表中不存在的ID。这正常吗?如果用户ID不在数据库中,DB.Exec是否返回err func DeleteUser(ID int){ err = nil _, err := DB.Exec("DELETE FROM Users WHERE user_id=$1", ID) if err == nil { return true

我在用葛兰和博士后。我想通过传入该用户的Id从表中删除该用户。当我运行下面的代码时,我总是得到正确的答案。即使我传入了一个表中不存在的ID。这正常吗?如果用户ID不在数据库中,DB.Exec是否返回err

func DeleteUser(ID int){
    err = nil
    _, err := DB.Exec("DELETE FROM Users WHERE user_id=$1", ID)

    if err == nil {

        return true
    }

    return false

}
试试这个

func DeleteUser(ID int){
    err = nil
    res, err := DB.Exec("DELETE FROM Users WHERE user_id=$1", ID)

    if err == nil {

       count, err := res.RowsAffected()  
       if err == nil {
          /* check count and return true/false */
       }

    }

    return false

}
试试这个

func DeleteUser(ID int){
    err = nil
    res, err := DB.Exec("DELETE FROM Users WHERE user_id=$1", ID)

    if err == nil {

       count, err := res.RowsAffected()  
       if err == nil {
          /* check count and return true/false */
       }

    }

    return false

}

这是正常的,如果您正在删除一个不存在的行,postgres不会返回错误,因此Go也不会返回错误。@mkopriva ok,谢谢。如果您想确定一行是否已被删除,您可以更改查询,如so err:=db.QueryRowDELETE FROM Users,其中user_id=$1返回user_id,ID.Scan&ID,如果结果错误等于sql.ErrNoRows,则删除了零行。这是正常的,如果您删除的行不存在,postgres不会返回错误,因此Go也不会返回错误。@mkopriva ok,谢谢。如果您想确定行是否被删除,您可以更改查询,与此类似,err:=db.QueryRowDELETE FROM Users,其中user_id=$1返回user_id,id.Scan&id,如果结果err等于sql.ErrNoRows,则删除零行。