亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法使用 Go 和 pq 連接到 postgresql

無法使用 Go 和 pq 連接到 postgresql

Go
收到一只叮咚 2022-08-15 15:46:56
我正在嘗試將Go應用程序與postgresql連接起來。應用程序導入后格雷 sql 驅動程序:"crypto/tls""database/sql""fmt""log""os""os/signal" ..._ "github.com/go-sql-driver/mysql"_ "github.com/lib/pq"_ "github.com/mattn/go-sqlite3"并使用類似它連接到數據庫:driver, cnxn := dbFromURI(dbURI)db, err := sql.Open(driver, cnxn)if err != nil {    panic(err)}而 dbFromUri 方法只是拆分了信息func dbFromURI(uri string) (string, string) {    parts := strings.Split(uri, "://")    return parts[0], parts[1]}我的URI在本地工作,當我運行命令:psql postgresql://user:[email protected]:5432/lcp但是在去我去,我得到了./lcpserver2021/03/07 02:00:42 Reading config /root/lcp-server-install/lcp-home/config/config.yamlpanic: pq: SSL is not enabled on the server我嘗試了這個URI的Go沒有成功:psql postgresql://user:[email protected]:5432/lcp?sslmode=disable你知道為什么我不能連接嗎?我嘗試使用我的aws rds postgres數據庫,并得到了相同的結果。Thnaks尋求幫助。服務器 https://github.com/readium/readium-lcp-server/blob/master/lcpserver/lcpserver.go 的完整代碼我更改了拼寫錯誤和演示,前提是我成功連接。但是在lcp服務器中,我的風格遇到了同樣的問題。postgres://user:[email protected]:5432/lcp?sslmode=disable
查看完整描述

1 回答

?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

第一個問題是連接字符串中的拼寫錯誤:。在 Go 代碼中,它應該是 .postgresql://user:[email protected]:5432/lcp?sslmode=disablepostgres://user:[email protected]:5432/lcp?sslmode=disable


我們還需要將完整的連接字符串作為第二個參數傳遞給 。現在,該函數返回 ,但我們需要 ,因為 pq 正在等待此前綴來解析它。sql.OpendbFromURIuser:[email protected]:5432/lcp?sslmode=disablepostgres://user:[email protected]:5432/lcp?sslmode=disable


修復此問題后,我能夠根據您的代碼使用最小的postgres客戶端建立連接。


若要親自嘗試此操作,請使用以下命令啟動服務器:


docker run --rm -p 5432:5432 -e POSTGRES_PASSWORD=some_password postgres

并嘗試使用以下客戶端代碼進行連接:


package main


import (

    "database/sql"

    "fmt"


    _ "github.com/lib/pq"

)


func main() {

    cnxn := "postgres://postgres:[email protected]:5432/lcp?sslmode=disable"


    _, err := sql.Open("postgres", cnxn)

    if err != nil {

        panic(err)

    }


    _, err = db.Prepare("SELECT id,encryption_key,location,length,sha256,type FROM content WHERE id = ? LIMIT 1")

    if err != nil {

         fmt.Println("Prepare failed")

         panic(err)

    }

}


查看完整回答
反對 回復 2022-08-15
  • 1 回答
  • 0 關注
  • 305 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號