登录
首页 >  Golang >  Go问答

追踪 PostgreSQL 中的 SQL 查询

来源:stackoverflow

时间:2024-03-15 22:12:35 479浏览 收藏

在追踪 PostgreSQL 中的 SQL 查询时,使用 sqlhooks 库可以拦截查询并进行日志记录。在使用该库时,需要正确格式化连接信息字符串。sql.Open() 函数的第二个参数需要一个连接字符串,它包含连接到数据库所需的信息,例如主机、端口、用户名、密码和数据库名称。如果不正确格式化连接字符串,例如缺少分隔符“=”或不正确的数据库名称,就会导致错误。

问题内容

sql.Register("sqlWithHooks", sqlhooks.Wrap(r.Driver(), &Hooks{}))

// Connect to the registered wrapped driver
db, err := sql.Open("sqlWithHooks", ":memory:")
if err != nil {
    fmt.Println("error",err)

}

rows, err := db.Query("SELECT id,name,cid,dimension,price FROM   table_name ")

if err != nil {
    fmt.Println("inside the error .........................",err)

}

运行此代码后,我收到连接信息字符串中“:内存:”后缺少“=”的错误。谁能告诉我我在这里所做的事情有什么问题吗?


解决方案


sql.open() 需要 2 个内容“drivername”和“datasourcename”。以 sqlhooks 为例,他们使用 sqlite 作为数据库。除此之外,他们还使用了 go-sqlite3,如果您仔细查看第 886 行的文件 sqlite3.go。您会看到 datasourcename ':memory:',这意味着我们选择在内存中利用 sqlite 数据库。

“datasourcename”将根据选择的数据库而变化。它基本上意味着数据源名称格式的连接字符串。

这有效的原因 fmt.sprintf("主机=%s 端口=%d 用户=%s 密码=%s dbname=%s sslmode=禁用", 主机、端口、用户、密码、数据库名)

sql.open() 的第二个参数需要一个连接字符串。它具有以下形式:

fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",
            host, port, user, password, dbname)

它包含打开与 postgres 的连接所需的信息。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>