2

我有一个使用 Go 的 sqlx 包(标准数据库/sql 包的扩展)和 Postgres 数据库运行的查询。它看起来像这样:

result, err := s.getDB(tx).Exec(`
    UPDATE table_name
    SET var_name = 0
    WHERE var_name = 1;`)
if err != nil {
    return nil, err
}

如果不使用托管事务,如何检索更新行的列表?或者至少是更新行的主键列表?

4

1 回答 1

3

使用PostgreSQL 的RETURNING子句db.Query/db.Select变体代替Exec, 例如

//get the primary key of updated rows
db := s.getDB(tx)

results := []int{}
err = db.Select(&results, "UPDATE mytable SET var_name = 0 WHERE var_name = 1 RETURNING id")

要检索多个列,只需在 之后列出列名RETURNING,例如

rows, err := db.Queryx("UPDATE mytable SET var_name = 0 WHERE var_name = 1 RETURNING id,var_name,other_columns")
for rows.Next() {
    //do something with the result
}
于 2017-08-12T09:49:55.647 回答