使用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
时,我始终会从unexpected command tag Q
收到Commit()
错误。这是什么错误(什么是Q?)以及为什么我得到它?
我相信this是创建错误的地方。
答案 0 :(得分:4)
首先我同意怀特德米特里的评论,在这种情况下你应该使用Exec。
然而,在收到同样的问题后,我开始挖掘:
Query返回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()
但是,当使用rows.Close()
女巫向我表明这可能是pq
中的错误时,我无法看到数据库的流量有任何差异。