为了账号安全,请及时绑定邮箱和手机立即绑定

无法使用 Go 和 pq 连接到 postgresql

无法使用 Go 和 pq 连接到 postgresql

Go
收到一只叮咚 2022-08-15 15:46:56
我正在尝试将Go应用程序与postgresql连接起来。应用程序导入后格雷 sql 驱动程序:"crypto/tls""database/sql""fmt""log""os""os/signal" ..._ "github.com/go-sql-driver/mysql"_ "github.com/lib/pq"_ "github.com/mattn/go-sqlite3"并使用类似它连接到数据库:driver, cnxn := dbFromURI(dbURI)db, err := sql.Open(driver, cnxn)if err != nil {    panic(err)}而 dbFromUri 方法只是拆分了信息func dbFromURI(uri string) (string, string) {    parts := strings.Split(uri, "://")    return parts[0], parts[1]}我的URI在本地工作,当我运行命令:psql postgresql://user:user@172.20.0.1:5432/lcp但是在去我去,我得到了./lcpserver2021/03/07 02:00:42 Reading config /root/lcp-server-install/lcp-home/config/config.yamlpanic: pq: SSL is not enabled on the server我尝试了这个URI的Go没有成功:psql postgresql://user:user@172.20.0.1:5432/lcp?sslmode=disable你知道为什么我不能连接吗?我尝试使用我的aws rds postgres数据库,并得到了相同的结果。Thnaks寻求帮助。服务器 https://github.com/readium/readium-lcp-server/blob/master/lcpserver/lcpserver.go 的完整代码我更改了拼写错误和演示,前提是我成功连接。但是在lcp服务器中,我的风格遇到了同样的问题。postgres://user:user@172.20.0.1:5432/lcp?sslmode=disable
查看完整描述

1 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

第一个问题是连接字符串中的拼写错误:。在 Go 代码中,它应该是 .postgresql://user:user@172.20.0.1:5432/lcp?sslmode=disablepostgres://user:user@172.20.0.1:5432/lcp?sslmode=disable


我们还需要将完整的连接字符串作为第二个参数传递给 。现在,该函数返回 ,但我们需要 ,因为 pq 正在等待此前缀来解析它。sql.OpendbFromURIuser:user@172.20.0.1:5432/lcp?sslmode=disablepostgres://user:user@172.20.0.1:5432/lcp?sslmode=disable


修复此问题后,我能够根据您的代码使用最小的postgres客户端建立连接。


若要亲自尝试此操作,请使用以下命令启动服务器:


docker run --rm -p 5432:5432 -e POSTGRES_PASSWORD=some_password postgres

并尝试使用以下客户端代码进行连接:


package main


import (

    "database/sql"

    "fmt"


    _ "github.com/lib/pq"

)


func main() {

    cnxn := "postgres://postgres:some_password@127.0.0.1:5432/lcp?sslmode=disable"


    _, err := sql.Open("postgres", cnxn)

    if err != nil {

        panic(err)

    }


    _, err = db.Prepare("SELECT id,encryption_key,location,length,sha256,type FROM content WHERE id = ? LIMIT 1")

    if err != nil {

         fmt.Println("Prepare failed")

         panic(err)

    }

}


查看完整回答
反对 回复 2022-08-15
  • 1 回答
  • 0 关注
  • 246 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信