【问题标题】:Using pgx to connect to postgres db in Go在 Go 中使用 pgx 连接到 postgres db
【发布时间】:2021-04-13 19:05:48
【问题描述】:

我正在尝试使用 jackc/pgx 包连接到我的 postgres 数据库,并且我正在按照提供的示例进行操作。问题是代码卡在连接调用中。我试过在它之后打印一些东西,但它不打印。

var dbURL string = fmt.Sprintf("postgresql://%s:%s@%s:%s/%s", user, password, host, port, dbname)

fmt.Println(dbURL)

conn, err := pgx.Connect(context.Background(), dbURL)
if err != nil {
    fmt.Fprintf(os.Stderr, "Unable to connect to database: %v\n", err)
    os.Exit(1)
}
defer conn.Close(context.Background())

var text string
err = conn.QueryRow(context.Background(), "select text from questions where id=$1", 1).Scan(&text)
if err != nil {
    fmt.Fprintf(os.Stderr, "QueryRow failed: %v\n", err)
    os.Exit(1)
}

fmt.Println(text)

输出:

postgresql://postgres:password@127.0.0.1:52269/database_name

我做错了什么?我可以使用 pgAdmin 4 连接到数据库,并且在使用 go 中的标准 sql 之前已经连接到它。

connectionString := fmt.Sprintf("user=%s password=%s dbname=%s sslmode=disable", user, password, dbname)
a.DB, err = sql.Open("postgres", connectionString)

【问题讨论】:

  • 它并没有像我说的那样过去。它不返回任何东西。打印输出后,它卡在那里,我必须 ctrl+c。我意识到端口是错误的,并且修复了它。它不应该给出错误而不是卡在那里吗?
  • 不应该只是postgres://...而不是postgresql://...吗?
  • 我见过的资料说postgresql
  • @Myntekt 只要您尝试过使用postgres:// 并且您会看到同样的问题,这很公平。
  • @Myntekt 请注意,您的dbURL 没有sslmode 设置,而据称工作的connectionString 有,所以也许这是您的问题?

标签: postgresql go


【解决方案1】:

pgx 的文档说连接字符串和 URL 都是允许的

https://pkg.go.dev/github.com/jackc/pgx/v4/pgxpool@v4.11.0#ParseConfig

示例 DSN

user=jack 密码=secret host=pg.example.com port=5432 dbname=mydb sslmode=verify-ca pool_max_conns=10

示例网址

postgres://jack:secret@pg.example.com:5432/mydb?sslmode=verify-ca&pool_max_conns=10

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 2016-08-14
    • 2020-04-04
    • 2020-12-01
    • 2018-05-22
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多