在Heroku上,Go + Postgres拒绝连接

Mat*_*man 6 postgresql heroku go

我正在尝试使用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
}
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*man 9

Heroku + Go非常讲究连接字符串.URL样式似乎不允许指定sslmode = require,Heroku 坚持这样做.

修改后的版本使用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
}
Run Code Online (Sandbox Code Playgroud)