【问题标题】:SSL is not enabled on the server服务器上未启用 SSL
【发布时间】:2020-08-04 08:49:36
【问题描述】:

尝试使用 go 与 postgres 数据库通信,准备如下语句:

var stmt *sql.Stmt
var err error

stmt, err = db.Prepare(selectStatement)
if err != nil {
    fmt.Printf("db.Prepare error: %v\n",err)
    return err
}

抛出以下错误:

db.Prepare error: pq: SSL is not enabled on the server

有什么办法吗?

如果需要,我可以添加更多信息。

【问题讨论】:

  • // ,我最终在 HashiCorp Vault 中收到此错误。
  • @NathanBasanese ,我知道那是很久以前的事了,但我解决了在连接字符串上附加 ?sslmode=disable 的问题。
  • 不敢相信这在 2021 年仍然有意义(几乎是 2022 年!)

标签: go


【解决方案1】:

您应该在没有 SSL 加密的情况下建立数据库连接,如下所示:

db, err := sql.Open("postgres", "user=test password=test dbname=test sslmode=disable") 

【讨论】:

  • 感谢这条拯救生命的评论。顺便说一句:有人知道如何设置 psql 以支持 docker 容器的 SSL 吗?
  • 感谢您的回答,我使用 Microsoft Power BI 连接到 PostgreSQL heroku 数据库时使用了 sslmode=require
【解决方案2】:

如果你的数据源名称是一个url,你会这样做:

db, err := sql.Open("postgres", "postgres://username:password@localhost/db_name?sslmode=disable")

sslmode 只是像查询参数一样添加到 db url。

【讨论】:

  • 这就是我需要的!
【解决方案3】:

请注意:

如果您指定了sslmode=disable,但其他参数为空,甚至会发生这种情况。例如dbname=

例如连接字符串:

user=test password=test dbname=sslmode=disable 将也会发出此错误,因为 dbname 为空。

【讨论】:

  • 这节省了我的本地开发设置,因为这里的密码是空的。
【解决方案4】:

要建立不使用 SSL 的连接,请尝试

postgres://username:password@host:5432/database?sslmode=disable

【讨论】:

  • // ,我将此添加到我的连接字符串中,并且它成功运行。谢谢,@Harald。
【解决方案5】:

这就是我的工作方式:

db, err := sql.Open("postgres", "postgres://{user}:{password}@{hostname}:{port}/{database-name}?sslmode=disable")

【讨论】:

    猜你喜欢
    • 2022-08-02
    • 2014-04-07
    • 2020-01-25
    • 1970-01-01
    • 2019-06-21
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    相关资源
    最近更新 更多