2014-09-03 80 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