2014-09-03 82 views
1

我正在从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执行查询时,它会失败。我怀疑这可能是一个权限问题。

+1

不知道去,但你的主机信息似乎有点奇怪。它不应该是本地主机?或您的数据库服务器的主机名? – faboolous 2014-09-03 02:23:49

+0

另外,从文档:'打开可能只是验证它的参数而不创建到数据库的连接。要验证数据源名称是否有效,请调用Ping.' – 2014-09-03 04:34:33

+1

此外,您应验证PostgreSQL确实正在侦听Unix套接字(如'/ var/run/postgresql'所示)。检查PostgreSQL日志中是否存在错误还会显示您的应用程序是否甚至打到了数据库,或者是否存在阻止此问题的权限/身份验证问题。 – elithrar 2014-09-03 04:56:13

回答

0

连接字符串参数应为user=foo,而不是username=foo