我该使用什么驱动程序名称,才能使用pgx驱动程序将Go sqlx连接到Postgres?

4
或者,我需要哪些额外的导入?
我想开始使用Postgres作为我正在进行的一些开发的主要DBMS,我的研究表明,目前pgx是首选的数据库驱动程序。我已经设置了一个连接包:
package database

import (
    "fmt"
    _ "github.com/jackc/pgx/v5"
    "net/url"

    "github.com/jmoiron/sqlx"
    log "github.com/sirupsen/logrus"
)

func PgConnect(username, password, host, app string) *sqlx.DB {
    s := fmt.Sprintf("postgres://%s:%s@%s?app+name=%s&sslmode=allow", url.QueryEscape(username), url.QueryEscape(password), host, app)
    db, err := sqlx.Connect("postgres", s)
    if err != nil {
        log.Panicf("failed to connect to sqlserver://%s:%s@%s err: %s", username, "xxxxxxxxxxxx", host, err)
    }

    return db
}

该网址的含义是:
postgres://user:password@database-host:5432/database-name?app+name=app-name&sslmode=allow

我也尝试了在互联网上看到的两种前缀:postgresql。在sqlx.Connect("postgres", s)调用中,对于驱动程序名称,我尝试了postgrespostgresqlpgx

在所有情况下,连接调用都会失败,并显示以下错误:

sql: unknown driver "postgres" (forgotten import?)

使用驱动程序mssql和mssql URL的相同代码可连接到Microsoft SQL Server。

有人可以帮我搞定这个吗?我在互联网上找到了很少关于这种语言/驱动程序/sqlx/postgres组合的资料。


1
应该使用 pgx,如果不行,请尝试导入 stdlib 子包(代替 jackc/pgx/v5)。请参阅 https://pkg.go.dev/github.com/jackc/pgx/v5@v5.0.4/stdlib。 - mkopriva
1个回答

4

从文档中可以看出,驱动程序的名称是pgx

A database/sql connection can be established through sql.Open.

db, err := sql.Open("pgx", "postgres://pgx_md5:secret@localhost:5432/pgx_test?sslmode=disable")
if err != nil {
  return err
}

所以你需要做两件事:

  1. Use the proper driver name:

        db, err := sqlx.Connect("pgx", s)
    
  2. Import the stdlib compatibility pacakge:

    import (
        _ "github.com/jackc/pgx/v5/stdlib" // Standard library bindings for pgx
    )
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接