Golang postgres提交未知命令错误?

时间:2016-03-29 21:59:45

标签: postgresql go pq

使用postgres 9.3go 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是创建错误的地方。

1 个答案:

答案 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中的错误时,我无法看到数据库的流量有任何差异。