9

我正在尝试使用 Go 连接到 Heroku 的 Postgres。在本地一切正常。

我在 Heroku 上收到的错误是dial tcp 127.0.0.1:5432: connection refused.

我已经确认我能够在 heroku 的命令行上通过 psql 连接到数据库,并确认数据库 url 配置是正确的。代码够清晰,不知道是不是底层问题。

代码很简单:

import (
    "database/sql"
    "github.com/coopernurse/gorp"
    _ "github.com/lib/pq"
    "os"
)

func openDb() *sql.DB {
    connection := os.Getenv("DATABASE_URL")

    db, err := sql.Open("postgres", connection)
    if err != nil {
        log.Println(err)
    }

    return db
}

...并且正在导入 github.com/lib/pq。Go 版本是 1.1.2。

4

1 回答 1

11

Heroku + Go 对连接字符串非常特别。URL 样式似乎不允许 Heroku坚持的 sslmode=require 规范。

修改后的版本使用 pq 将 URL 解析为传统的 Postgres 连接字符串,并附加参数:

import (
    "database/sql"
    "github.com/lib/pq"
    "os"
)

func openDb() *sql.DB {
    url := os.Getenv("DATABASE_URL")
    connection, _ := pq.ParseURL(url)
    connection += " sslmode=require"

    db, err := sql.Open("postgres", connection)
    if err != nil {
        log.Println(err)
    }

    return db
}
于 2013-10-04T04:52:25.713 回答