我正在尝试使用Go语言的pq驱动程序连接到PostgreSQL数据库。当我在本地数据库副本上使用连接字符串时,例如:
DB, err = sql.Open("postgres", "user=user password=pwd dbname=mydb sslmode=disable")
所有功能都运作良好。
但是,当我切换到一个连接经过 pgbouncer 的生产服务器时:
DB, err = sql.Open("postgres", "user=user password=pwd host=/var/run/pgbouncer port=port dbname=mydb sslmode=disable")
我对所有查询都不管多简单,总是得到同样的错误:
Database error: pq: S:"ERROR" M:"prepared statement \"1\" does not exist" C:"26000" F:"prepare.c" L:"519" R:"FetchPreparedStatement"
无论我尝试传递的查询是什么,它总是“prepared statement \”1\“”。
在这两种情况下,查询都是简单地运行如下:
res_rows, err := DB.Query(query)
if err != nil {
log.Printf("Database error: %s\n", err)
}
for res_rows.Next() {
...
}
通过谷歌搜索得知可以关闭预处理语句,但我不知道如何在Go中实现这一点,也不确定是否支持。非常感谢任何帮助(甚至是建议使用完全不同的东西)。