使用pgx在Go中连接PostgreSQL数据库

7
我试图使用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来中止程序。我意识到端口是错误的,更正后问题得以解决。难道它不应该给出错误提示而不是一直卡在那里吗? - Lucas
应该只是 postgres://... 而不是 postgresql://...,对吗? - mkopriva
我看到的资料显示postgresql。 - Lucas
@Myntekt 只要你已经尝试使用 postgres:// 并且看到了相同的问题,那就可以了。 - mkopriva
@Myntekt 注意一下,你的 dbURL 没有设置 sslmode,而所谓工作正常的 connectionString 却有,也许这就是你的问题所在? - mkopriva
顺便提一下,你可以尝试使用“connectionString”代替URL。 - chabad360
1个回答

5

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