我使用什么驱动程序名称连接Go sqlx到Postgres使用pgx驱动程序?



或者,我需要哪些额外的导入?

我想开始使用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
}

URL的计算结果为:

postgres://user:password@database-host:5432/database-name?app+name=app-name&sslmode=allow

,我也尝试了postgresql的前缀,因为我在互联网上看到过这两个地方。

对于sqlx.Connect("postgres", s)呼叫中的驱动程序名称,我已经尝试了postgres, postgresqlpgx

在所有情况下,连接调用都失败,并出现错误:

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

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

谁能帮我弄一下这个?我在网上几乎找不到语言/驱动/sqlx/postgres的这种组合。

从文档中,我们可以看到驱动程序的名称是pgx:

数据库/sql连接可以通过sql. open .

db, err := sql.Open("pgx", "postgres://pgx_md5:secret@localhost:5432/pgx_test?sslmode=disable")
if err != nil {
  return err
}
所以你需要做两件事:
  1. 使用正确的驱动程序名称:

        db, err := sqlx.Connect("pgx", s)
    
  2. 导入stdlib兼容性包:

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

最新更新