我正在从Digital Ocean运行全新安装的Ubuntu 14.04。我已经通过调用sudo apt-get install postgresql postgresql-contrib
安装了Postgres。我通过调用go get github.com/lib/pq
安装Postgres驱动程序。lib/pq连接但查询失败,连接不良
我做了一个名为foo
的Ubuntu用户。然后,我使用createuser --interactive
创建一个名为foo
的Postgres角色,其属性仅为Create DB
。接下来,我通过调用createdb foo
来创建一个新的数据库。最后,我用CREATE TABLE
创建了一个新表格。哦,并且我已将export PGHOST=/var/run/postgresql
添加到我的.bashrc
文件中。
然后,我写了下面的文件在/home/foo/go/src/dbtest.go
。
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/lib/pq"
)
func main() {
connInfo := "username=foo dbname=foo host=/var/run/postgresql sslmode=disable"
db, err := sql.Open("postgres", connInfo)
if err != nil {
log.Fatalln(err)
}
defer db.Close()
rows, err := db.Query("SELECT * FROM bar")
if err != nil {
log.Fatalln(err) // Code fails here.
}
defer rows.Close()
fmt.Println(rows)
}
我遇到的问题是,调用sql.Open
不返回一个错误,但是当我打电话db.Query
我得到driver: bad connection
。作为用户foo
,我可以使用Postgres解释器,但是当我尝试从Go执行查询时,它会失败。我怀疑这可能是一个权限问题。
不知道去,但你的主机信息似乎有点奇怪。它不应该是本地主机?或您的数据库服务器的主机名? – faboolous 2014-09-03 02:23:49
另外,从文档:'打开可能只是验证它的参数而不创建到数据库的连接。要验证数据源名称是否有效,请调用Ping.' – 2014-09-03 04:34:33
此外,您应验证PostgreSQL确实正在侦听Unix套接字(如'/ var/run/postgresql'所示)。检查PostgreSQL日志中是否存在错误还会显示您的应用程序是否甚至打到了数据库,或者是否存在阻止此问题的权限/身份验证问题。 – elithrar 2014-09-03 04:56:13