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

Pet*_*ter 5 postgresql go sqlx 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
}
Run Code Online (Sandbox Code Playgroud)

URL 的计算结果为:

postgres://user:password@database-host:5432/database-name?app+name=app-name&sslmode=allow
Run Code Online (Sandbox Code Playgroud)

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

对于呼叫中的驱动程序名称sqlx.Connect("postgres", s)我已尝试过postgrespostgresql并且pgx

在所有情况下,对 connect 的调用都会失败并出现错误:

sql: unknown driver "postgres" (forgotten import?)
Run Code Online (Sandbox Code Playgroud)

相同的代码(带有驱动程序mssql和 mssql URL)可以连接到 Microsoft SQL Server。

谁能帮我解决这个问题吗?我在互联网上发现很少有关于语言/驱动程序/sqlx/postgres 的组合。

Fli*_*mzy 4

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

可以通过sql.Open建立数据库/sql连接。

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

所以你需要做两件事:

  1. 使用正确的驱动程序名称:

    db, err := sql.Open("pgx", "postgres://pgx_md5:secret@localhost:5432/pgx_test?sslmode=disable")
    if err != nil {
      return err
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 导入stdlib兼容包:

        db, err := sqlx.Connect("pgx", s)
    
    Run Code Online (Sandbox Code Playgroud)