5

使用postgres 9.3,go 1.6

我一直在尝试使用与go pq图书馆的交易。

// Good
txn, _ := db.Begin()
txn.Query("UPDATE t_name SET a = 1")
err := txn.Commit() // err is nil

// Bad
txn, _ := db.Begin()
txn.Query("UPDATE t_name SET a = $1", 1)
err := txn.Commit() // Gives me a "unexpected command tag Q" error
// although the data is committed

出于某种原因,当我执行Query带有参数的 a 时,我总是unexpected command tag QCommit(). 这个错误是什么(什么是 Q?),为什么我会得到它?

我相信是造成错误的地方。

4

1 回答 1

11

首先,我同意评论中的 Dmitri,在这种情况下,您可能应该使用 Exec。

然而,在收到同样的问题后,我开始挖掘:

查询返回 2 个参数,一个 Rows 指针和一个错误。对于 Rows 对象,您始终要做的就是在不使用它时关闭它:

// Fixed
txn, _ := db.Begin()
rows, _ := txn.Query("UPDATE t_name SET a = $1", 1)
//Read out rows
rows.Close() //<- This will solve the error
err := txn.Commit()

但是,当使用 witch 时,我看不到数据库流量有任何差异,rows.Close()这向我表明这可能是pq.

于 2016-04-26T13:52:10.170 回答