首頁 > 後端開發 > Golang > 主體

無法連線到 psql 資料庫

王林
發布: 2024-02-09 18:00:10
轉載
1220 人瀏覽過

无法连接到 psql 数据库

php小編蘋果進行資料庫操作時,有時會遇到"無法連接到 psql 資料庫"的問題。這個錯誤訊息通常出現在使用PostgreSQL資料庫時,可能是因為一些常見的原因導致的連線失敗。解決這個問題的方法有很多,包括檢查資料庫連線參數、確認資料庫是否正在運作、檢查網路連線等。在本文中,我們將介紹一些常見的解決方法,幫助讀者快速解決這個問題,並順利進行資料庫操作。

問題內容

我正在嘗試連接到資料庫,但當我使用 get 方法向端點發出curl 請求時出現錯誤。我仔細檢查了使用者憑證,並授予了完全權限和超級使用者權限。 以下是捲曲端點時出現的錯誤:

santosh@pkg*$:curl -i localhost:8080/books/show
http/1.1 303 see other
content-type: text/html; charset=utf-8
location: /books
date: sat, 19 nov 2022 12:09:52 gmt
content-length: 33

<a href="/books">see other</a>.
登入後複製

與資料庫建立連接,當向資料庫發出請求時,會觸發這些錯誤:

santosh@pkg*$:go run main.go 
database connection successful.
2022/11/19 17:39:47 http: panic serving 127.0.0.1:44324: runtime error: invalid memory address or nil pointer dereference
goroutine 35 [running]:
net/http.(*conn).serve.func1()
        /usr/local/go/src/net/http/server.go:1850 +0xbf
panic({0x6960e0, 0x8e5630})
        /usr/local/go/src/runtime/panic.go:890 +0x262
database/sql.(*db).conn(0x0, {0x7593d0, 0xc00011a000}, 0x1)
        /usr/local/go/src/database/sql/sql.go:1288 +0x53
database/sql.(*db).query(0x6?, {0x7593d0, 0xc00011a000}, {0x6da967, 0x13}, {0x0, 0x0, 0x0}, 0x68?)
登入後複製

主程式:

var db *sql.DB

type Books struct {
    Isbn   string
    Title  string
    Author string
    Price  float32
}

func init() {
    var err error
    args := fmt.Sprintf("host=%s port=%d dbname=%s user='%s' password=%s sslmode=%s", "localhost", 5432, "bookstore", "santosh", "dts123", "disable")
    db, err := sql.Open("postgres", args)
    if err != nil {
        fmt.Printf("Creating Database %s", err)
    }
    if err = db.Ping(); err != nil {
        panic(err)
    }
    fmt.Println("Database connection succussful.")

}

func main() {
    http.HandleFunc("/", index)
    http.HandleFunc("/books", booksIndex)
    http.ListenAndServe(":8080", nil)
}

func index(w http.ResponseWriter, r *http.Request) {
    http.Redirect(w, r, "/books", http.StatusSeeOther)
}

func booksIndex(w http.ResponseWriter, r *http.Request) {
    if r.Method != "GET" {
        http.Error(w, http.StatusText(405), http.StatusMethodNotAllowed)
        return
    }

    rows, err := db.Query("SELECT * FROM books")
    if err != nil {
        http.Error(w, http.StatusText(500), 500)
        return
    }
    defer rows.Close()

    bks := make([]Books, 0)
    for rows.Next() {
        bk := Books{}
        err := rows.Scan(&bk.Isbn, &bk.Title, &bk.Author, &bk.Price)
        if err != nil {
            http.Error(w, http.StatusText(500), 500)
            return
        }
        bks = append(bks, bk)
    }
    if err = rows.Err(); err != nil {
        http.Error(w, http.StatusText(500), 500)
        return
    }

}
登入後複製

我嘗試仔細檢查使用者權限和資料庫格式以及順序。一切都符合代碼。連線已建立,但在查詢資料庫時因恐慌而失敗。

解決方法

您沒有正確初始化套件級 db 變數。

:= 運算子稱為“短變數宣告”,在其區塊作用域中宣告並初始化一個變數。外部作用域中任何具有相同名稱的變數都會被「隱藏」。

要正確初始化包級變量,您可以使用簡單的賦值

65床fd11e6f5

或您可以使用 := 但隨後使用不同的變數名稱並確保將其用於指派:

var db *sql.DB

func init() {
    args := fmt.Sprintf("host=%s port=%d dbname=%s user='%s' password=%s sslmode=%s", "localhost", 5432, "bookstore", "santosh", "dts123", "disable")

    _db, err := sql.Open("postgres", args)
    if err != nil {
        fmt.Printf("Creating Database %s", err)
    }
    // ...

    db = _db // set "global"
}
登入後複製

以上是無法連線到 psql 資料庫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!