gpt4 book ai didi

postgresql - pq 驱动程序 : prepared statement does not exist

转载 作者:IT王子 更新时间:2023-10-29 01:00:14 27 4
gpt4 key购买 nike

我正在尝试使用 pq driver 连接到 postresql 数据库在去。当我在数据库的本地副本上执行此操作时,连接字符串如

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"

(它始终是“准备好的语句\"1\"”,与我要传递的查询无关)

两种情况下的查询都按如下方式运行:

res_rows, err := DB.Query(query)
if err != nil {
log.Printf("Database error: %s\n", err)
}
for res_rows.Next() {
...
}

谷歌搜索建议关闭准备好的语句,但我不知道如何在 Go 中执行此操作,而且我不确定是否支持它。任何帮助(甚至是完全使用其他东西的建议)将不胜感激。

最佳答案

Package driver

type Queryer

type Queryer interface {
Query(query string, args []Value) (Rows, error)
}

Queryer is an optional interface that may be implemented by a Conn.

If a Conn does not implement Queryer, the sql package's DB.Query will first prepare a query, execute the statement, and then close the statement.

我没看到 lib/pq 在哪里PostgreSQL 驱动程序实现 Queryer。因此,DB.Query 查询是在执行前准备的。

PgBouncer不支持所有池化方法的 PREPARE 功能:Feature matrix for pooling modes .

关于postgresql - pq 驱动程序 : prepared statement does not exist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17614441/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com